@posiwise/resource-module 0.0.199 → 0.0.200

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 (30) hide show
  1. package/fesm2022/{posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs → posiwise-resource-module-base-top-banner.component-db9D53MI.mjs} +2 -2
  2. package/fesm2022/{posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs.map → posiwise-resource-module-base-top-banner.component-db9D53MI.mjs.map} +1 -1
  3. package/fesm2022/{posiwise-resource-module-resource-blogs.module-Czhlpgcb.mjs → posiwise-resource-module-resource-blogs.module-C7DtGCXR.mjs} +4 -4
  4. package/fesm2022/{posiwise-resource-module-resource-blogs.module-Czhlpgcb.mjs.map → posiwise-resource-module-resource-blogs.module-C7DtGCXR.mjs.map} +1 -1
  5. package/fesm2022/{posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs → posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs} +2 -2
  6. package/fesm2022/{posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs.map → posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs.map} +1 -1
  7. package/fesm2022/{posiwise-resource-module-resource-case-studies.module-ClEua35f.mjs → posiwise-resource-module-resource-case-studies.module-CPcpQWlI.mjs} +3 -3
  8. package/fesm2022/{posiwise-resource-module-resource-case-studies.module-ClEua35f.mjs.map → posiwise-resource-module-resource-case-studies.module-CPcpQWlI.mjs.map} +1 -1
  9. package/fesm2022/{posiwise-resource-module-resource-events.module-CFngKia0.mjs → posiwise-resource-module-resource-events.module-yyacWPwv.mjs} +3 -3
  10. package/fesm2022/{posiwise-resource-module-resource-events.module-CFngKia0.mjs.map → posiwise-resource-module-resource-events.module-yyacWPwv.mjs.map} +1 -1
  11. package/fesm2022/{posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs → posiwise-resource-module-resource-hub.module-C-SpVctG.mjs} +3 -3
  12. package/fesm2022/{posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs.map → posiwise-resource-module-resource-hub.module-C-SpVctG.mjs.map} +1 -1
  13. package/fesm2022/{posiwise-resource-module-resource-integrations.module-D7xWr2Y2.mjs → posiwise-resource-module-resource-integrations.module-0Ei4NMHQ.mjs} +4 -4
  14. package/fesm2022/{posiwise-resource-module-resource-integrations.module-D7xWr2Y2.mjs.map → posiwise-resource-module-resource-integrations.module-0Ei4NMHQ.mjs.map} +1 -1
  15. package/fesm2022/{posiwise-resource-module-resource-post.module-DijUa5vO.mjs → posiwise-resource-module-resource-post.module-C8O8oiWv.mjs} +3 -3
  16. package/fesm2022/{posiwise-resource-module-resource-post.module-DijUa5vO.mjs.map → posiwise-resource-module-resource-post.module-C8O8oiWv.mjs.map} +1 -1
  17. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-u6O3JD9u.mjs → posiwise-resource-module-resource-release-notes.module-CZeNqmRV.mjs} +4 -4
  18. package/fesm2022/{posiwise-resource-module-resource-release-notes.module-u6O3JD9u.mjs.map → posiwise-resource-module-resource-release-notes.module-CZeNqmRV.mjs.map} +1 -1
  19. package/fesm2022/{posiwise-resource-module-resource-root.module-3WYuuuw6.mjs → posiwise-resource-module-resource-root.module-CQd_uoG7.mjs} +2 -2
  20. package/fesm2022/{posiwise-resource-module-resource-root.module-3WYuuuw6.mjs.map → posiwise-resource-module-resource-root.module-CQd_uoG7.mjs.map} +1 -1
  21. package/fesm2022/{posiwise-resource-module-resource-videos.module-BTPdGGSf.mjs → posiwise-resource-module-resource-videos.module-DUz-VKpv.mjs} +4 -4
  22. package/fesm2022/{posiwise-resource-module-resource-videos.module-BTPdGGSf.mjs.map → posiwise-resource-module-resource-videos.module-DUz-VKpv.mjs.map} +1 -1
  23. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-DY-hDx94.mjs → posiwise-resource-module-resource-white-papers.module-Badb-ZZo.mjs} +4 -4
  24. package/fesm2022/{posiwise-resource-module-resource-white-papers.module-DY-hDx94.mjs.map → posiwise-resource-module-resource-white-papers.module-Badb-ZZo.mjs.map} +1 -1
  25. package/fesm2022/{posiwise-resource-module-resource.service-B09CoD3d.mjs → posiwise-resource-module-resource.service-Dyxc3yQ6.mjs} +9 -6
  26. package/fesm2022/posiwise-resource-module-resource.service-Dyxc3yQ6.mjs.map +1 -0
  27. package/fesm2022/posiwise-resource-module.mjs +12 -12
  28. package/package.json +1 -1
  29. package/types/posiwise-resource-module.d.ts +1 -0
  30. package/fesm2022/posiwise-resource-module-resource.service-B09CoD3d.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-B09CoD3d.mjs";
2
- import { a as BaseResourceComponent, s as CaseStudyCardComponent } from "./posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-Dyxc3yQ6.mjs";
2
+ import { a as BaseResourceComponent, s as CaseStudyCardComponent } from "./posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs";
3
3
  import { ResourceSharedModule, ResourceTopBannerEditComponent, TestimonialCardListComponent } from "./posiwise-resource-module.mjs";
4
4
  import * as i0 from "@angular/core";
5
5
  import { ChangeDetectionStrategy, Component, NgModule } from "@angular/core";
@@ -243,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({
243
243
  });
244
244
  export { ResourceCaseStudiesModule };
245
245
 
246
- //# sourceMappingURL=posiwise-resource-module-resource-case-studies.module-ClEua35f.mjs.map
246
+ //# sourceMappingURL=posiwise-resource-module-resource-case-studies.module-CPcpQWlI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-case-studies.module-ClEua35f.mjs","names":["i1.ResourceService","i4.ResourceTopBannerEditComponent","i5.CaseStudyCardComponent","i9.TestimonialCardListComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-case-studies/resource-case-studies.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/resource-case-studies.component.html","../../../../libs/resource-module/src/lib/public/modules/case-studies/resource-case-studies.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\n\nimport { ResourceService } from '../../../resource.service';\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\n@Component({\n selector: 'pw-resource-case-studies',\n templateUrl: './resource-case-studies.component.html',\n styleUrls: ['./resource-case-studies.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceCaseStudiesComponent extends BaseResourceComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n cdr: ChangeDetectorRef,\n private readonly titleService: Title,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, cdr, injector);\n }\n\n protected getResourceType(): string {\n return 'Case Studies';\n }\n\n protected override getSearchTerm(): string {\n return 'Case Studies';\n }\n\n protected override shouldUseTagCategories(): boolean {\n return true;\n }\n\n protected override shouldLoadTestimonials(): boolean {\n return true;\n }\n\n protected override getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n if (this.shouldUseTagCategories()) {\n this.blogPostTag = response.tags.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n } else {\n this.blogPostTag = response.tags.find(\n tag => tag.name === this.getResourceType()\n );\n }\n this.updateSEOMetadata();\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n private 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 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 shouldShowTestimonials(): boolean {\n // Show if there are testimonials\n if (this.testimonialsPosts && this.testimonialsPosts.length > 0) {\n return true;\n }\n\n // Show if user is not logged in (no admin checks needed)\n if (!this.userLoggedIn || !this.user) {\n return false;\n }\n\n // Show if user is SUPER ADMIN\n if (this.permissionService.isSuperAdmin()) {\n return true;\n }\n\n // Show if user is MASTER SUBSCRIPTION ADMIN\n const userMasterSubscription = this.user?.subscriptions?.find(sub =>\n sub.products?.some(p => p.is_master_product)\n );\n const masterProduct = userMasterSubscription?.products?.find(p => p.is_master_product);\n const masterProductWithSlug = masterProduct\n ? {\n ...masterProduct,\n subscription_slug: userMasterSubscription?.slug\n }\n : null;\n\n if (\n masterProductWithSlug &&\n this.permissionService.isUserSubscriptionSuperAdmin(masterProductWithSlug)\n ) {\n return true;\n }\n\n return false;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\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 || 'Case Studies'\"></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 <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\">Real solutions &mdash; real results.</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\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/case-studies-man.png'\"\n alt=\"Case studies banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n@if (shouldShowTestimonials()) {\n <pw-testimonial-card [posts]=\"testimonialsPosts\" [postHeader]=\"'Testimonials'\" [canEdit]=\"canEditResourcesValue\" (editPost)=\"getTestimonialsPosts(1, 100)\" id=\"reviews\"></pw-testimonial-card>\n}\n@if (blogPostTag?.tag_category_id) {\n <pw-case-studies-card [tag]=\"blogPostTag\" id=\"case-studies\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-case-studies-card>\n}\n\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 { ResourceCaseStudiesComponent } from '../../components/resource-case-studies/resource-case-studies.component';\nimport { TestimonialCardListComponent } from '../../components/testimonial-card/testimonial-card.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceCaseStudiesComponent,\n data: {\n title: 'Resources - Case Studies',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [\n ResourceCaseStudiesComponent,\n TestimonialCardListComponent // Only used in case studies\n ],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceCaseStudiesModule {}\n"],"mappings":";;;;;;;;;;;;AAgBA,IAAa,+BAAb,MAAa,qCAAqC,sBAAqB;CAGnE,YACI,iBACA,YACA,aACA,KACiB,cACjB,UAAkB;EAElB,MAAM,iBAAiB,YAAY,aAAa,KAAK,QAAQ;EAH5C,KAAA,eAAA;EAPrB,KAAA,eAAe,KAAK,WAAW,cAAc,YAAY;CAWzD;CAEU,kBAAe;EACrB,OAAO;CACX;CAEmB,gBAAa;EAC5B,OAAO;CACX;CAEmB,yBAAsB;EACrC,OAAO;CACX;CAEmB,yBAAsB;EACrC,OAAO;CACX;CAEmB,cAAW;EAC1B,KAAK,WACA,cAAc,mBAAmB,CAAA,GAAI,KAAK,2BAA0B,CAAE,CAAC,CACvE,WAAU,aAAW;GAClB,IAAI,KAAK,uBAAsB,GAC3B,KAAK,cAAc,SAAS,KAAK,MAC7B,QAAO,IAAI,oBAAoB,KAAK,aAAa,EAAE;QAGvD,KAAK,cAAc,SAAS,KAAK,MAC7B,QAAO,IAAI,SAAS,KAAK,gBAAe,CAAE;GAGlD,KAAK,kBAAiB;GACtB,KAAK,SAAS,GAAG,GAAG;GACpB,KAAK,IAAI,aAAY;EACzB,CAAC,CAAC,CACD,UAAS;GACN,KAAK,WAAW;GAChB,KAAK,IAAI,aAAY;EACzB,CAAC;CACT;CAEQ,oBAAiB;EACrB,IAAI,KAAK,aAAa;GAElB,IAAI,KAAK,YAAY,YACjB,KAAK,aAAa,SAAS,KAAK,YAAY,UAAU;GAG1D,IAAI,KAAK,YAAY,kBACjB,KAAK,sBAAsB,KAAK,YAAY,gBAAgB;EAEpE;CACJ;CAEQ,sBAAsB,aAAmB;EAC7C,IAAI,kBAAkB,SAAS,cAAc,4BAA0B;EACvE,IAAI,CAAC,iBAAiB;GAClB,kBAAkB,SAAS,cAAc,MAAM;GAC/C,gBAAgB,aAAa,QAAQ,aAAa;GAClD,SAAS,KAAK,YAAY,eAAe;EAC7C;EACA,gBAAgB,aAAa,WAAW,WAAW;CACvD;CACA,yBAAsB;EAElB,IAAI,KAAK,qBAAqB,KAAK,kBAAkB,SAAS,GAC1D,OAAO;EAIX,IAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,MAC5B,OAAO;EAIX,IAAI,KAAK,kBAAkB,aAAY,GACnC,OAAO;EAIX,MAAM,yBAAyB,KAAK,MAAM,eAAe,MAAK,QAC1D,IAAI,UAAU,MAAK,MAAK,EAAE,iBAAiB,CAAC;EAEhD,MAAM,gBAAgB,wBAAwB,UAAU,MAAK,MAAK,EAAE,iBAAiB;EACrF,MAAM,wBAAwB,gBACxB;GACI,GAAG;GACH,mBAAmB,wBAAwB;EAC9C,IACD;EAEN,IACI,yBACA,KAAK,kBAAkB,6BAA6B,qBAAqB,GAEzE,OAAO;EAGX,OAAO;CACX;CA/GS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA4B,MAAA;IAAA,EAAA,OAAAA,gBAAA;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,YAAA;IAAA,EAAA,OAAA,GAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,MAAA;IAAA,EAAA,OAAA,GAAA,SAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA5B;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAA4B,cAAA;GAAA,UAAA;GAAA,iBAAA;GAAA,UAAA;GAAA,UChBzC;GA+DA,QAAA,CAAA,65RAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MAAAC;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAAC;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA,CAAA,QAAA,cAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAAC;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,UAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AD/Ca,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA4B,YAAA,CAAA;EARxC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAA0B,iBAInB,wBAAwB;GAAM,YACnC;GAAK,UAAA;GAAA,QAAA,CAAA,65RAAA;EAAA,CAAA;;;;;;;;;;;AEPrB,MAAM,SAAiB,CACnB;CACI,MAAM;CACN,WAAW;CACX,MAAM;EACF,OAAO;EACP,YAAY;EACZ,SAAS;CACZ;AACJ,CACJ;AASD,IAAa,4BAAb,MAAa,0BAAyB;CAAzB;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAyB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAzB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAyB,cAAA,CAL9B,8BACA,4BAEM;GAAA,SAAA,CAAA,sBAAoB,GAAA,YAAA;EAAA,CAAA;CAAA;CAErB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAyB,SAAA,CAFxB,sBAAsB,aAAa,SAAS,MAAM,CAAC;EAAA,CAAA;CAAA;;AAEpD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EAPrC,MAAA;EAAS,MAAA,CAAA;GACN,cAAc,CACV,8BACA,4BACH;GACD,SAAS,CAAC,sBAAsB,aAAa,SAAS,MAAM,CAAC;EAChE,CAAA"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-case-studies.module-CPcpQWlI.mjs","names":["i1.ResourceService","i4.ResourceTopBannerEditComponent","i5.CaseStudyCardComponent","i9.TestimonialCardListComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-case-studies/resource-case-studies.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/resource-case-studies.component.html","../../../../libs/resource-module/src/lib/public/modules/case-studies/resource-case-studies.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injector } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\n\nimport { ResourceService } from '../../../resource.service';\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\n@Component({\n selector: 'pw-resource-case-studies',\n templateUrl: './resource-case-studies.component.html',\n styleUrls: ['./resource-case-studies.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceCaseStudiesComponent extends BaseResourceComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n cdr: ChangeDetectorRef,\n private readonly titleService: Title,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, cdr, injector);\n }\n\n protected getResourceType(): string {\n return 'Case Studies';\n }\n\n protected override getSearchTerm(): string {\n return 'Case Studies';\n }\n\n protected override shouldUseTagCategories(): boolean {\n return true;\n }\n\n protected override shouldLoadTestimonials(): boolean {\n return true;\n }\n\n protected override getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n if (this.shouldUseTagCategories()) {\n this.blogPostTag = response.tags.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n } else {\n this.blogPostTag = response.tags.find(\n tag => tag.name === this.getResourceType()\n );\n }\n this.updateSEOMetadata();\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n private 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 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 shouldShowTestimonials(): boolean {\n // Show if there are testimonials\n if (this.testimonialsPosts && this.testimonialsPosts.length > 0) {\n return true;\n }\n\n // Show if user is not logged in (no admin checks needed)\n if (!this.userLoggedIn || !this.user) {\n return false;\n }\n\n // Show if user is SUPER ADMIN\n if (this.permissionService.isSuperAdmin()) {\n return true;\n }\n\n // Show if user is MASTER SUBSCRIPTION ADMIN\n const userMasterSubscription = this.user?.subscriptions?.find(sub =>\n sub.products?.some(p => p.is_master_product)\n );\n const masterProduct = userMasterSubscription?.products?.find(p => p.is_master_product);\n const masterProductWithSlug = masterProduct\n ? {\n ...masterProduct,\n subscription_slug: userMasterSubscription?.slug\n }\n : null;\n\n if (\n masterProductWithSlug &&\n this.permissionService.isUserSubscriptionSuperAdmin(masterProductWithSlug)\n ) {\n return true;\n }\n\n return false;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\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 || 'Case Studies'\"></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 <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\">Real solutions &mdash; real results.</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\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/case-studies-man.png'\"\n alt=\"Case studies banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n@if (shouldShowTestimonials()) {\n <pw-testimonial-card [posts]=\"testimonialsPosts\" [postHeader]=\"'Testimonials'\" [canEdit]=\"canEditResourcesValue\" (editPost)=\"getTestimonialsPosts(1, 100)\" id=\"reviews\"></pw-testimonial-card>\n}\n@if (blogPostTag?.tag_category_id) {\n <pw-case-studies-card [tag]=\"blogPostTag\" id=\"case-studies\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-case-studies-card>\n}\n\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 { ResourceCaseStudiesComponent } from '../../components/resource-case-studies/resource-case-studies.component';\nimport { TestimonialCardListComponent } from '../../components/testimonial-card/testimonial-card.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceCaseStudiesComponent,\n data: {\n title: 'Resources - Case Studies',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [\n ResourceCaseStudiesComponent,\n TestimonialCardListComponent // Only used in case studies\n ],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceCaseStudiesModule {}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-B09CoD3d.mjs";
2
- import { n as UpcomingEventCardComponent } from "./posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-Dyxc3yQ6.mjs";
2
+ import { n as UpcomingEventCardComponent } from "./posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs";
3
3
  import { ResourceSharedModule, ResourceTopBannerEditComponent } from "./posiwise-resource-module.mjs";
4
4
  import * as i0 from "@angular/core";
5
5
  import { ChangeDetectionStrategy, Component, NgModule } from "@angular/core";
@@ -265,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({
265
265
  });
266
266
  export { ResourceEventsModule };
267
267
 
268
- //# sourceMappingURL=posiwise-resource-module-resource-events.module-CFngKia0.mjs.map
268
+ //# sourceMappingURL=posiwise-resource-module-resource-events.module-yyacWPwv.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-events.module-CFngKia0.mjs","names":["i1.ResourceService","i4.ResourceTopBannerEditComponent","i5.UpcomingEventCardComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-webinars/resource-webinars.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/resource-webinars.component.html","../../../../libs/resource-module/src/lib/public/modules/events/resource-events.module.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\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, Tag, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-webinars',\n templateUrl: './resource-webinars.component.html',\n styleUrls: [\n './resource-webinars.component.scss',\n '../resource-case-studies/resource-case-studies.component.scss',\n '../resources/resources-shared.component.scss'\n ],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceWebinarComponent extends AppBaseComponent implements OnInit {\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n upcomingPosts = [];\n tagCategory;\n userLoggedIn: boolean;\n blogPostTag;\n isLoaded = false;\n\n canEditResourcesValue = false;\n\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n user: User;\n isMasterSubscription;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly authService: AuthService,\n private readonly tagService: TagService,\n private readonly titleService: Title,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\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.getTags();\n this.updateCanEditResourcesValue();\n this.cdr.markForCheck();\n });\n } else {\n this.getTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Events' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[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 this.blogPostTag = response.tags.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 private updateSEOMetadata() {\n if (this.blogPostTag) {\n // Update page title if meta_title is available\n if ((this.blogPostTag as Tag).meta_title) {\n this.titleService.setTitle((this.blogPostTag as Tag).meta_title);\n }\n\n // Update meta description if meta_description is available\n if ((this.blogPostTag as Tag).meta_description) {\n this.updateMetaDescription((this.blogPostTag as Tag).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 /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n\n<section class=\"bg-white\">\n <div class=\"resource-banner resource-section\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\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 || 'Events & Webinars'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getPostTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension\">\n @if (!blogPostTag?.description || blogPostTag.description === 'null') {\n <p class=\"intro\">\n We&rsquo;re big on community and even bigger on sharing what works.\n </p>\n } @else {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n }\n <div class=\"cta-buttons 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 class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img\"\n [src]=\"(blogPostTag?.image?.url !== null && !blogPostTag?.image?.url?.includes('default-photo.jpg') && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared')) ) ? blogPostTag?.image?.url : 'assets/img/resource/events-women.png'\"\n alt=\"Events and webinars banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n<section class=\"bg-white\">\n <pw-upcoming-event-card [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-upcoming-event-card>\n</section>\n\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 { ResourceWebinarComponent } from '../../components/resource-webinars/resource-webinars.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceWebinarComponent,\n data: {\n title: 'Resources - Events',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceWebinarComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceEventsModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-events.module-yyacWPwv.mjs","names":["i1.ResourceService","i4.ResourceTopBannerEditComponent","i5.UpcomingEventCardComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-webinars/resource-webinars.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/resource-webinars.component.html","../../../../libs/resource-module/src/lib/public/modules/events/resource-events.module.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\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, Tag, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-webinars',\n templateUrl: './resource-webinars.component.html',\n styleUrls: [\n './resource-webinars.component.scss',\n '../resource-case-studies/resource-case-studies.component.scss',\n '../resources/resources-shared.component.scss'\n ],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceWebinarComponent extends AppBaseComponent implements OnInit {\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n upcomingPosts = [];\n tagCategory;\n userLoggedIn: boolean;\n blogPostTag;\n isLoaded = false;\n\n canEditResourcesValue = false;\n\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n user: User;\n isMasterSubscription;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly authService: AuthService,\n private readonly tagService: TagService,\n private readonly titleService: Title,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\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.getTags();\n this.updateCanEditResourcesValue();\n this.cdr.markForCheck();\n });\n } else {\n this.getTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Events' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[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 this.blogPostTag = response.tags.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 private updateSEOMetadata() {\n if (this.blogPostTag) {\n // Update page title if meta_title is available\n if ((this.blogPostTag as Tag).meta_title) {\n this.titleService.setTitle((this.blogPostTag as Tag).meta_title);\n }\n\n // Update meta description if meta_description is available\n if ((this.blogPostTag as Tag).meta_description) {\n this.updateMetaDescription((this.blogPostTag as Tag).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 /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n\n<section class=\"bg-white\">\n <div class=\"resource-banner resource-section\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\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 || 'Events & Webinars'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getPostTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension\">\n @if (!blogPostTag?.description || blogPostTag.description === 'null') {\n <p class=\"intro\">\n We&rsquo;re big on community and even bigger on sharing what works.\n </p>\n } @else {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n }\n <div class=\"cta-buttons 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 class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img\"\n [src]=\"(blogPostTag?.image?.url !== null && !blogPostTag?.image?.url?.includes('default-photo.jpg') && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared')) ) ? blogPostTag?.image?.url : 'assets/img/resource/events-women.png'\"\n alt=\"Events and webinars banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n\n<section class=\"bg-white\">\n <pw-upcoming-event-card [tag]=\"blogPostTag\" [categoryId]=\"blogPostTag?.tag_category_id\" [resourceTitle]=\"blogPostTag?.title\" [postSlice]=\"true\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-upcoming-event-card>\n</section>\n\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 { ResourceWebinarComponent } from '../../components/resource-webinars/resource-webinars.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceWebinarComponent,\n data: {\n title: 'Resources - Events',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceWebinarComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceEventsModule {}\n"],"mappings":";;;;;;;;;;;;;;AA4BA,IAAa,2BAAb,MAAa,iCAAiC,iBAAgB;CAiB1D,YACqB,iBACA,aACA,YACA,cACA,KACjB,UAAkB;EAElB,MAAM,QAAQ;EAPG,KAAA,kBAAA;EACA,KAAA,cAAA;EACA,KAAA,aAAA;EACA,KAAA,eAAA;EACA,KAAA,MAAA;EApBrB,KAAA,uBAAuB,KAAK,UAAU,oBAAoB;EAC1D,KAAA,QAAoB,CAAA;EACpB,KAAA,gBAAgB,CAAA;EAIhB,KAAA,WAAW;EAEX,KAAA,wBAAwB;EAExB,KAAA,eAAe,KAAK,WAAW,cAAc,YAAY;CAczD;CAEA,WAAQ;EACJ,KAAK,sBAAqB,CAAE,CAAC,WAAU,aAAW;GAC9C,KAAK,iBAAiB;GACtB,KAAK,IAAI,aAAY;EACzB,CAAC;EACD,KAAK,YAAY,UAAS,CAAE,CAAC,WAAU,QAAM;GACzC,KAAK,eAAe,CAAC,CAAC;GACtB,IAAI,KAAK,cAAc;IACnB,KAAK,aAAa,SAAS,SAAS,CAAC,CAAC,WAAU,QAAM;KAClD,MAAM,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI;KACrC,KAAK,iBAAiB,MAAM;KAC5B,KAAK,IAAI,aAAY;IACzB,CAAC;IACD,KAAK,YAAY,YAAW,CAAE,CAAC,WAAU,SAAO;KAC5C,KAAK,OAAO;KACZ,KAAK,QAAO;KACZ,KAAK,4BAA2B;KAChC,KAAK,IAAI,aAAY;IACzB,CAAC;GACL,OACI,KAAK,QAAO;GAEhB,KAAK,IAAI,aAAY;EACzB,CAAC;CACL;CAEQ,UAAO;EACX,KAAK,WAAW;EAChB,KAAK,WACA,oBAAoB,EAAE,QAAQ,SAAQ,GAAI,KAAK,2BAA0B,CAAE,CAAC,CAC5E,WAAU,aAAW;GAClB,KAAK,cAAc,UAAU,iBAAiB;GAC9C,KAAK,YAAW;GAChB,KAAK,IAAI,aAAY;EACzB,CAAC;CACT;CAEQ,cAAW;EACf,KAAK,WACA,cAAc,mBAAmB,CAAA,GAAI,KAAK,2BAA0B,CAAE,CAAC,CACvE,WAAU,aAAW;GAClB,KAAK,cAAc,SAAS,KAAK,MAC7B,QAAO,IAAI,oBAAoB,KAAK,aAAa,EAAE;GAEvD,KAAK,kBAAiB;GACtB,KAAK,IAAI,aAAY;EACzB,CAAC,CAAC,CACD,UAAS;GACN,KAAK,WAAW;GAChB,KAAK,IAAI,aAAY;EACzB,CAAC;CACT;CAEQ,oBAAiB;EACrB,IAAI,KAAK,aAAa;GAElB,IAAK,KAAK,YAAoB,YAC1B,KAAK,aAAa,SAAU,KAAK,YAAoB,UAAU;GAInE,IAAK,KAAK,YAAoB,kBAC1B,KAAK,sBAAuB,KAAK,YAAoB,gBAAgB;EAE7E;CACJ;CAEQ,sBAAsB,aAAmB;EAC7C,IAAI,kBAAkB,SAAS,cAAc,4BAA0B;EACvE,IAAI,CAAC,iBAAiB;GAClB,kBAAkB,SAAS,cAAc,MAAM;GAC/C,gBAAgB,aAAa,QAAQ,aAAa;GAClD,SAAS,KAAK,YAAY,eAAe;EAC7C;EACA,gBAAgB,aAAa,WAAW,WAAW;CACvD;CAGQ,6BAA0B;EAC9B,OAAO,cAAc,2BACjB,KAAK,MACL,KAAK,gBACL,KAAK,oBAAoB;CAEjC;CAEQ,8BAA2B;EAC/B,IAAI,KAAK,gBAAgB,KAAK,MAC1B,KAAK,wBAAwB,cAAc,iBACvC,KAAK,MACL,KAAK,cACL,KAAK,iBAAiB;OAG1B,KAAK,wBAAwB;CAErC;CAEA,mBAAgB;EACZ,OAAO,KAAK;CAChB;CAhIS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAwB,MAAA;IAAA,EAAA,OAAAA,gBAAA;IAAA,EAAA,OAAA,GAAA,YAAA;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,MAAA;IAAA,EAAA,OAAA,GAAA,kBAAA;IAAA,EAAA,OAAA,GAAA,SAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAxB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAwB,cAAA;GAAA,UAAA;GAAA,iBAAA;GAAA,UAAA;GAAA,UC5BrC;GAwDA,QAAA;IAAA;IAAA;IAAA;GAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MAAAC;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,eAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAAC;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA,CAAA,QAAA,cAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;EAAA,CAAA;CAAA;;AD5Ba,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAwB,YAAA,CAAA;EAZpC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAsB,iBAQf,wBAAwB;GAAM,YACnC;GAAK,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;GAAA;EAAA,CAAA;;;;;;;;;;;AEpBrB,MAAM,SAAiB,CACnB;CACI,MAAM;CACN,WAAW;CACX,MAAM;EACF,OAAO;EACP,YAAY;EACZ,SAAS;CACZ;AACJ,CACJ;AAMD,IAAa,uBAAb,MAAa,qBAAoB;CAApB;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAoB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAApB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAoB,cAAA,CAHd,wBAAwB;GAAA,SAAA,CAC7B,sBAAoB,GAAA,YAAA;EAAA,CAAA;CAAA;CAErB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAoB,SAAA,CAFnB,sBAAsB,aAAa,SAAS,MAAM,CAAC;EAAA,CAAA;CAAA;;AAEpD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EAJhC,MAAA;EAAS,MAAA,CAAA;GACN,cAAc,CAAC,wBAAwB;GACvC,SAAS,CAAC,sBAAsB,aAAa,SAAS,MAAM,CAAC;EAChE,CAAA"}
@@ -1,5 +1,5 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-B09CoD3d.mjs";
2
- import { l as ResourceEditCardLazyComponent } from "./posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-Dyxc3yQ6.mjs";
2
+ import { l as ResourceEditCardLazyComponent } from "./posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs";
3
3
  import { ResourceSharedModule } from "./posiwise-resource-module.mjs";
4
4
  import * as i0 from "@angular/core";
5
5
  import { ChangeDetectionStrategy, Component, HostListener, NgModule, ViewEncapsulation } from "@angular/core";
@@ -440,4 +440,4 @@ i0.ɵɵngDeclareClassMetadata({
440
440
  });
441
441
  export { ResourceHubModule };
442
442
 
443
- //# sourceMappingURL=posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs.map
443
+ //# sourceMappingURL=posiwise-resource-module-resource-hub.module-C-SpVctG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs","names":["i1.ResourceService","i7.ResourceEditCardLazyComponent","i1"],"sources":["../../../../libs/resource-module/src/lib/public/components/resources-hub/resources-hub.component.ts","../../../../libs/resource-module/src/lib/public/components/resources-hub/resources-hub.component.html","../../../../libs/resource-module/src/lib/public/modules/hub/resource-hub.module.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n Injector,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, Tag, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin, Subscription } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\nimport { RESOURCE_PAGE_SIZE } from '../../shared/resource-pager';\n\n@Component({\n selector: 'pw-posts-list',\n templateUrl: './resources-hub.component.html',\n styleUrls: [\n './resources-hub.component.scss',\n '../resource-company-card/resource-company-card.component.scss'\n ],\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceHubComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private delayTimeout: ReturnType<typeof setTimeout> | null = null;\n private userSub: Subscription;\n\n data = [];\n\n posts: Resource[] = [];\n tags: Tag[] = [];\n\n selectedTags = [];\n\n currentPage = 1;\n pageSize = RESOURCE_PAGE_SIZE;\n objectCount = 0;\n\n searchTextItems = '';\n searchInput = false;\n\n readingTime: number;\n\n totalRecords: number;\n\n loading = true;\n loaded = false;\n\n masterSubscriptionId: number;\n subscriptionId;\n userLoggedIn: boolean;\n isMasterSubscription;\n\n scrollLocked = false;\n\n iconClasses: string[] = [\n 'fa-lightbulb',\n 'fa-rocket',\n 'fa-file-alt',\n 'fa-users',\n 'fa-video',\n 'fa-pencil-alt',\n 'fa-book-open',\n 'fa-cogs'\n ];\n user: User;\n\n canEditResourcesValue = false;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly authService: AuthService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userSub = this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.updateCanEditResourcesValue();\n this.getPostsAndTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getPostsAndTags();\n }\n this.cdr.markForCheck();\n });\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.readingTime = 0;\n }\n\n getPostsAndTags() {\n this.loading = true;\n this.loaded = false;\n forkJoin({\n resPosts: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n this.currentPage,\n this.pageSize,\n this.searchTextItems\n ),\n resTags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(res => {\n this.posts = res?.resPosts?.posts;\n this.objectCount = res?.resPosts.object_count;\n this.data = res?.resPosts?.posts;\n this.data = res?.resPosts?.posts.map(post => ({\n ...post,\n expandedTags: false\n }));\n this.totalRecords = this.posts?.length;\n\n this.tags = res?.resTags?.tags?.filter(tag => tag.visible_in_resources);\n this.tags = this.tags.map(tag => ({\n ...tag\n }));\n this.cdr.markForCheck();\n })\n .add(() => {\n this.loading = false;\n this.loaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleDropdown(event: Event, post): void {\n event.stopPropagation();\n post.showDropdown = !post.showDropdown;\n }\n\n getPosts(page: number, pageSize: number, fetchAll = false, append = false) {\n if (fetchAll) this.selectedTags = [];\n\n if (!append) {\n this.loading = true;\n this.loaded = false;\n }\n\n const tagCategoryParam = this.selectedTags.map(tag => tag.tag_category_id).join(',');\n\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n this.searchTextItems,\n tagCategoryParam\n )\n .subscribe(response => {\n this.objectCount = response.object_count;\n this.posts = append ? [...this.posts, ...response.posts] : response.posts;\n this.data = [...this.posts];\n this.totalRecords = this.posts?.length;\n this.cdr.markForCheck();\n })\n .add(() => {\n this.loading = false;\n this.loaded = true;\n this.cdr.markForCheck();\n });\n }\n\n onSearch(seconds: number) {\n let delay = 0;\n delay = seconds * 1000;\n clearTimeout(this.delayTimeout);\n const delayTimeout = setTimeout(() => {\n this.currentPage = 1;\n this.getPosts(1, this.pageSize);\n }, delay);\n\n this.delayTimeout = delayTimeout;\n }\n\n navigateToTagList(): void {\n HelperService.navigateToTagList();\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll(): void {\n const scrollPosition = window.scrollY + window.innerHeight;\n const pageHeight = document.documentElement.scrollHeight;\n\n const nearBottom = scrollPosition >= pageHeight - 100;\n\n if (\n nearBottom &&\n this.posts.length < this.objectCount &&\n !this.loading &&\n !this.scrollLocked\n ) {\n this.scrollLocked = true;\n this.currentPage += 1;\n\n this.getPosts(this.currentPage, this.pageSize, false, true);\n\n setTimeout(() => {\n this.scrollLocked = false;\n }, 500);\n }\n }\n\n isSelected(tagId: number): boolean {\n return this.selectedTags.map(tag => tag.id).includes(tagId);\n }\n\n tagPost(selectedTag) {\n const index = this.selectedTags.findIndex(\n tag => tag.tag_category_id === selectedTag?.tag_category_id && tag.id === selectedTag.id\n );\n\n if (index === -1) {\n this.selectedTags.push({\n tag_category_id: selectedTag?.tag_category_id,\n id: selectedTag.id\n });\n } else {\n this.selectedTags.splice(index, 1);\n }\n\n this.currentPage = 1;\n this.getPosts(1, this.pageSize);\n }\n\n thisPostReadingTime(text: string): string {\n if (text) {\n const wordsPerMinute = 200;\n const noOfWords = text.split(/\\s/g).length;\n const minutes = noOfWords / wordsPerMinute;\n const readTime = Math.ceil(minutes);\n\n return `${readTime} minute read`;\n }\n\n return '';\n }\n\n override ngOnDestroy() {\n this.userSub?.unsubscribe();\n super.ngOnDestroy();\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.appConfig.master_subscription.subscription_id\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n\n<div class=\"hub-page\">\n<section class=\"hub-hero\" aria-labelledby=\"hub-hero-title\">\n <div class=\"hub-hero__glow\" aria-hidden=\"true\"></div>\n <div class=\"hub-hero__grid\" aria-hidden=\"true\"></div>\n <div class=\"hub-hero__inner\">\n <p class=\"hub-hero__eyebrow\">{{ 'Resource.Posts.Title' | transloco | uppercase }}</p>\n <h1 id=\"hub-hero-title\" class=\"hub-hero__title\">\n Stories, guides, and notes <br class=\"hub-hero__br\" />from the team.\n </h1>\n <p class=\"hub-hero__subtitle\">{{ 'Resource.Hub.Subtitle' | transloco }}</p>\n <div class=\"hub-hero__search\">\n <p-iconfield class=\"hub-hero__search-field\" iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\" id=\"resources-hub-search\" name=\"resources-hub-search\"\n [(ngModel)]=\"searchTextItems\" pInputText\n [placeholder]=\"'Resource.Hub.SearchPlaceholder' | transloco\"\n (input)=\"onSearch(1)\" class=\"hub-hero__search-input\"\n aria-label=\"Resources Hub Search\" />\n </p-iconfield>\n @if (userLoggedIn && user?.auth?.granted['Pages.Admin']) {\n <button type=\"button\" class=\"hub-hero__edit\"\n [title]=\"'Resource.Hub.EditTagsTooltip' | transloco\"\n [attr.aria-label]=\"'Resource.Hub.EditTagsTooltip' | transloco\"\n (click)=\"navigateToTagList()\" (keydown.enter)=\"navigateToTagList()\">\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n</section>\n\n<div class=\"hub-shell\">\n <nav class=\"hub-chips\" aria-label=\"Resource categories\">\n <button type=\"button\" class=\"hub-chip hub-chip--all\"\n [class.hub-chip--selected]=\"selectedTags.length === 0\"\n (click)=\"getPosts(1, pageSize, true)\" (keydown.enter)=\"getPosts(1, pageSize, true)\">\n <span class=\"hub-chip__dot\" aria-hidden=\"true\"></span>\n <span class=\"hub-chip__label\">{{ 'Resource.Hub.AllResources' | transloco }}</span>\n @if (objectCount) { <span class=\"hub-chip__count\">{{ objectCount }}</span> }\n </button>\n @for (tag of tags; track tag.id) {\n <button type=\"button\" class=\"hub-chip\"\n [class.hub-chip--selected]=\"isSelected(tag.id)\"\n (click)=\"tagPost(tag)\" (keydown.enter)=\"tagPost(tag)\">\n <span class=\"hub-chip__dot\" [attr.data-cat]=\"tag.id % 6\" aria-hidden=\"true\"></span>\n <span class=\"hub-chip__label\">{{ tag.name }}</span>\n </button>\n }\n </nav>\n\n @if (loading && !loaded) {\n <div class=\"hub-loading\"><p-progress-spinner strokeWidth=\"2\"></p-progress-spinner></div>\n }\n\n @if (posts?.length && !loading) {\n <ul class=\"hub-grid\" role=\"list\">\n @for (post of data; track post.id; let i = $index) {\n <li class=\"hub-post\" [style.--reveal-delay.ms]=\"i * 40\">\n <pw-resource-edit-card-lazy [canEdit]=\"canEditResourcesValue\" [id]=\"post?.id\"\n [resourceData]=\"post\" (updated)=\"getPosts(1, pageSize)\"></pw-resource-edit-card-lazy>\n\n <a class=\"hub-post__media\" [routerLink]=\"['/resources/view', post.slug]\"\n [attr.aria-label]=\"post.title\"\n [attr.data-cat]=\"(post?.tags?.[0]?.id || 0) % 6\">\n @if (post.picture?.url && !post.picture.url.includes('default-photo')) {\n <img [src]=\"post.picture?.url\" alt=\"\" loading=\"lazy\" class=\"hub-post__image\" />\n } @else {\n <span class=\"hub-post__glyph\" aria-hidden=\"true\">\n {{ (post.title?.[0] || '?').toUpperCase() }}\n </span>\n @if (post?.tags?.[0]?.icon_name) {\n <i class=\"fa hub-post__icon\" [ngClass]=\"post.tags[0].icon_name\" aria-hidden=\"true\"></i>\n }\n }\n </a>\n\n <div class=\"hub-post__body\">\n @if (post?.tags?.[0]) {\n <p class=\"hub-post__eyebrow\" [attr.data-cat]=\"post.tags[0].id % 6\">\n <span class=\"hub-post__dot\" aria-hidden=\"true\"></span>\n {{ post.tags[0].name }}\n </p>\n }\n <h2 class=\"hub-post__title\" [routerLink]=\"['/resources/view', post.slug]\">{{ post.title }}</h2>\n <p class=\"hub-post__excerpt\">{{ post.blurb || (post.body | removeHtml: 'quill' | textTruncate: 140) }}</p>\n <div class=\"hub-post__foot\">\n @if (post.author?.avatar?.[0]?.url) {\n <img class=\"hub-post__avatar\" [src]=\"post.author.avatar[0].url\" alt=\"\" />\n } @else {\n <span class=\"hub-post__avatar hub-post__avatar--text\" aria-hidden=\"true\">{{ (post.author?.first_name?.[0] || '?').toUpperCase() }}</span>\n }\n <div class=\"hub-post__author-meta\">\n <span class=\"hub-post__author-name\">{{ post.author?.first_name }}</span>\n <span class=\"hub-post__author-sub\">\n <time [attr.datetime]=\"post.published_at\">{{ post.published_at | date: 'd MMM' }}</time>\n <span class=\"hub-post__sep\" aria-hidden=\"true\">·</span>\n <span class=\"hub-post__rt\">{{ thisPostReadingTime(post.body) }}</span>\n </span>\n </div>\n <span class=\"hub-post__views\" [title]=\"'Resource.Hub.ViewCount' | transloco: { count: post.view ?? 0 }\">\n {{ post.view ?? 0 }}\n </span>\n </div>\n </div>\n </li>\n }\n </ul>\n }\n\n @if (!posts?.length && loaded) {\n <div class=\"hub-empty\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n }\n</div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceHubComponent } from '../../components/resources-hub/resources-hub.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceHubComponent,\n data: {\n title: 'Resources - Hub',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceHubComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceHubModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-hub.module-C-SpVctG.mjs","names":["i1.ResourceService","i7.ResourceEditCardLazyComponent","i1"],"sources":["../../../../libs/resource-module/src/lib/public/components/resources-hub/resources-hub.component.ts","../../../../libs/resource-module/src/lib/public/components/resources-hub/resources-hub.component.html","../../../../libs/resource-module/src/lib/public/modules/hub/resource-hub.module.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n Injector,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, Tag, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin, Subscription } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\nimport { RESOURCE_PAGE_SIZE } from '../../shared/resource-pager';\n\n@Component({\n selector: 'pw-posts-list',\n templateUrl: './resources-hub.component.html',\n styleUrls: [\n './resources-hub.component.scss',\n '../resource-company-card/resource-company-card.component.scss'\n ],\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceHubComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private delayTimeout: ReturnType<typeof setTimeout> | null = null;\n private userSub: Subscription;\n\n data = [];\n\n posts: Resource[] = [];\n tags: Tag[] = [];\n\n selectedTags = [];\n\n currentPage = 1;\n pageSize = RESOURCE_PAGE_SIZE;\n objectCount = 0;\n\n searchTextItems = '';\n searchInput = false;\n\n readingTime: number;\n\n totalRecords: number;\n\n loading = true;\n loaded = false;\n\n masterSubscriptionId: number;\n subscriptionId;\n userLoggedIn: boolean;\n isMasterSubscription;\n\n scrollLocked = false;\n\n iconClasses: string[] = [\n 'fa-lightbulb',\n 'fa-rocket',\n 'fa-file-alt',\n 'fa-users',\n 'fa-video',\n 'fa-pencil-alt',\n 'fa-book-open',\n 'fa-cogs'\n ];\n user: User;\n\n canEditResourcesValue = false;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly authService: AuthService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userSub = this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n this.updateCanEditResourcesValue();\n this.getPostsAndTags();\n this.cdr.markForCheck();\n });\n } else {\n this.getPostsAndTags();\n }\n this.cdr.markForCheck();\n });\n this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n this.readingTime = 0;\n }\n\n getPostsAndTags() {\n this.loading = true;\n this.loaded = false;\n forkJoin({\n resPosts: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n this.currentPage,\n this.pageSize,\n this.searchTextItems\n ),\n resTags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(res => {\n this.posts = res?.resPosts?.posts;\n this.objectCount = res?.resPosts.object_count;\n this.data = res?.resPosts?.posts;\n this.data = res?.resPosts?.posts.map(post => ({\n ...post,\n expandedTags: false\n }));\n this.totalRecords = this.posts?.length;\n\n this.tags = res?.resTags?.tags?.filter(tag => tag.visible_in_resources);\n this.tags = this.tags.map(tag => ({\n ...tag\n }));\n this.cdr.markForCheck();\n })\n .add(() => {\n this.loading = false;\n this.loaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleDropdown(event: Event, post): void {\n event.stopPropagation();\n post.showDropdown = !post.showDropdown;\n }\n\n getPosts(page: number, pageSize: number, fetchAll = false, append = false) {\n if (fetchAll) this.selectedTags = [];\n\n if (!append) {\n this.loading = true;\n this.loaded = false;\n }\n\n const tagCategoryParam = this.selectedTags.map(tag => tag.tag_category_id).join(',');\n\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n this.searchTextItems,\n tagCategoryParam\n )\n .subscribe(response => {\n this.objectCount = response.object_count;\n this.posts = append ? [...this.posts, ...response.posts] : response.posts;\n this.data = [...this.posts];\n this.totalRecords = this.posts?.length;\n this.cdr.markForCheck();\n })\n .add(() => {\n this.loading = false;\n this.loaded = true;\n this.cdr.markForCheck();\n });\n }\n\n onSearch(seconds: number) {\n let delay = 0;\n delay = seconds * 1000;\n clearTimeout(this.delayTimeout);\n const delayTimeout = setTimeout(() => {\n this.currentPage = 1;\n this.getPosts(1, this.pageSize);\n }, delay);\n\n this.delayTimeout = delayTimeout;\n }\n\n navigateToTagList(): void {\n HelperService.navigateToTagList();\n }\n\n @HostListener('window:scroll', [])\n onWindowScroll(): void {\n const scrollPosition = window.scrollY + window.innerHeight;\n const pageHeight = document.documentElement.scrollHeight;\n\n const nearBottom = scrollPosition >= pageHeight - 100;\n\n if (\n nearBottom &&\n this.posts.length < this.objectCount &&\n !this.loading &&\n !this.scrollLocked\n ) {\n this.scrollLocked = true;\n this.currentPage += 1;\n\n this.getPosts(this.currentPage, this.pageSize, false, true);\n\n setTimeout(() => {\n this.scrollLocked = false;\n }, 500);\n }\n }\n\n isSelected(tagId: number): boolean {\n return this.selectedTags.map(tag => tag.id).includes(tagId);\n }\n\n tagPost(selectedTag) {\n const index = this.selectedTags.findIndex(\n tag => tag.tag_category_id === selectedTag?.tag_category_id && tag.id === selectedTag.id\n );\n\n if (index === -1) {\n this.selectedTags.push({\n tag_category_id: selectedTag?.tag_category_id,\n id: selectedTag.id\n });\n } else {\n this.selectedTags.splice(index, 1);\n }\n\n this.currentPage = 1;\n this.getPosts(1, this.pageSize);\n }\n\n thisPostReadingTime(text: string): string {\n if (text) {\n const wordsPerMinute = 200;\n const noOfWords = text.split(/\\s/g).length;\n const minutes = noOfWords / wordsPerMinute;\n const readTime = Math.ceil(minutes);\n\n return `${readTime} minute read`;\n }\n\n return '';\n }\n\n override ngOnDestroy() {\n this.userSub?.unsubscribe();\n super.ngOnDestroy();\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.appConfig.master_subscription.subscription_id\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n\n<div class=\"hub-page\">\n<section class=\"hub-hero\" aria-labelledby=\"hub-hero-title\">\n <div class=\"hub-hero__glow\" aria-hidden=\"true\"></div>\n <div class=\"hub-hero__grid\" aria-hidden=\"true\"></div>\n <div class=\"hub-hero__inner\">\n <p class=\"hub-hero__eyebrow\">{{ 'Resource.Posts.Title' | transloco | uppercase }}</p>\n <h1 id=\"hub-hero-title\" class=\"hub-hero__title\">\n Stories, guides, and notes <br class=\"hub-hero__br\" />from the team.\n </h1>\n <p class=\"hub-hero__subtitle\">{{ 'Resource.Hub.Subtitle' | transloco }}</p>\n <div class=\"hub-hero__search\">\n <p-iconfield class=\"hub-hero__search-field\" iconPosition=\"left\">\n <p-inputicon><i class=\"fa fa-search\" aria-hidden=\"true\"></i></p-inputicon>\n <input type=\"text\" id=\"resources-hub-search\" name=\"resources-hub-search\"\n [(ngModel)]=\"searchTextItems\" pInputText\n [placeholder]=\"'Resource.Hub.SearchPlaceholder' | transloco\"\n (input)=\"onSearch(1)\" class=\"hub-hero__search-input\"\n aria-label=\"Resources Hub Search\" />\n </p-iconfield>\n @if (userLoggedIn && user?.auth?.granted['Pages.Admin']) {\n <button type=\"button\" class=\"hub-hero__edit\"\n [title]=\"'Resource.Hub.EditTagsTooltip' | transloco\"\n [attr.aria-label]=\"'Resource.Hub.EditTagsTooltip' | transloco\"\n (click)=\"navigateToTagList()\" (keydown.enter)=\"navigateToTagList()\">\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n</section>\n\n<div class=\"hub-shell\">\n <nav class=\"hub-chips\" aria-label=\"Resource categories\">\n <button type=\"button\" class=\"hub-chip hub-chip--all\"\n [class.hub-chip--selected]=\"selectedTags.length === 0\"\n (click)=\"getPosts(1, pageSize, true)\" (keydown.enter)=\"getPosts(1, pageSize, true)\">\n <span class=\"hub-chip__dot\" aria-hidden=\"true\"></span>\n <span class=\"hub-chip__label\">{{ 'Resource.Hub.AllResources' | transloco }}</span>\n @if (objectCount) { <span class=\"hub-chip__count\">{{ objectCount }}</span> }\n </button>\n @for (tag of tags; track tag.id) {\n <button type=\"button\" class=\"hub-chip\"\n [class.hub-chip--selected]=\"isSelected(tag.id)\"\n (click)=\"tagPost(tag)\" (keydown.enter)=\"tagPost(tag)\">\n <span class=\"hub-chip__dot\" [attr.data-cat]=\"tag.id % 6\" aria-hidden=\"true\"></span>\n <span class=\"hub-chip__label\">{{ tag.name }}</span>\n </button>\n }\n </nav>\n\n @if (loading && !loaded) {\n <div class=\"hub-loading\"><p-progress-spinner strokeWidth=\"2\"></p-progress-spinner></div>\n }\n\n @if (posts?.length && !loading) {\n <ul class=\"hub-grid\" role=\"list\">\n @for (post of data; track post.id; let i = $index) {\n <li class=\"hub-post\" [style.--reveal-delay.ms]=\"i * 40\">\n <pw-resource-edit-card-lazy [canEdit]=\"canEditResourcesValue\" [id]=\"post?.id\"\n [resourceData]=\"post\" (updated)=\"getPosts(1, pageSize)\"></pw-resource-edit-card-lazy>\n\n <a class=\"hub-post__media\" [routerLink]=\"['/resources/view', post.slug]\"\n [attr.aria-label]=\"post.title\"\n [attr.data-cat]=\"(post?.tags?.[0]?.id || 0) % 6\">\n @if (post.picture?.url && !post.picture.url.includes('default-photo')) {\n <img [src]=\"post.picture?.url\" alt=\"\" loading=\"lazy\" class=\"hub-post__image\" />\n } @else {\n <span class=\"hub-post__glyph\" aria-hidden=\"true\">\n {{ (post.title?.[0] || '?').toUpperCase() }}\n </span>\n @if (post?.tags?.[0]?.icon_name) {\n <i class=\"fa hub-post__icon\" [ngClass]=\"post.tags[0].icon_name\" aria-hidden=\"true\"></i>\n }\n }\n </a>\n\n <div class=\"hub-post__body\">\n @if (post?.tags?.[0]) {\n <p class=\"hub-post__eyebrow\" [attr.data-cat]=\"post.tags[0].id % 6\">\n <span class=\"hub-post__dot\" aria-hidden=\"true\"></span>\n {{ post.tags[0].name }}\n </p>\n }\n <h2 class=\"hub-post__title\" [routerLink]=\"['/resources/view', post.slug]\">{{ post.title }}</h2>\n <p class=\"hub-post__excerpt\">{{ post.blurb || (post.body | removeHtml: 'quill' | textTruncate: 140) }}</p>\n <div class=\"hub-post__foot\">\n @if (post.author?.avatar?.[0]?.url) {\n <img class=\"hub-post__avatar\" [src]=\"post.author.avatar[0].url\" alt=\"\" />\n } @else {\n <span class=\"hub-post__avatar hub-post__avatar--text\" aria-hidden=\"true\">{{ (post.author?.first_name?.[0] || '?').toUpperCase() }}</span>\n }\n <div class=\"hub-post__author-meta\">\n <span class=\"hub-post__author-name\">{{ post.author?.first_name }}</span>\n <span class=\"hub-post__author-sub\">\n <time [attr.datetime]=\"post.published_at\">{{ post.published_at | date: 'd MMM' }}</time>\n <span class=\"hub-post__sep\" aria-hidden=\"true\">·</span>\n <span class=\"hub-post__rt\">{{ thisPostReadingTime(post.body) }}</span>\n </span>\n </div>\n <span class=\"hub-post__views\" [title]=\"'Resource.Hub.ViewCount' | transloco: { count: post.view ?? 0 }\">\n {{ post.view ?? 0 }}\n </span>\n </div>\n </div>\n </li>\n }\n </ul>\n }\n\n @if (!posts?.length && loaded) {\n <div class=\"hub-empty\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n }\n</div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ResourceHubComponent } from '../../components/resources-hub/resources-hub.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceHubComponent,\n data: {\n title: 'Resources - Hub',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceHubComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceHubModule {}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-B09CoD3d.mjs";
2
- import { c as ResourceNoteCardComponent } from "./posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-Dyxc3yQ6.mjs";
2
+ import { c as ResourceNoteCardComponent } from "./posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs";
3
3
  import { ResourceCompanyCardComponent, ResourceSharedModule, ResourceTopBannerEditComponent } from "./posiwise-resource-module.mjs";
4
- import { t as BaseTopBannerComponent } from "./posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs";
4
+ import { t as BaseTopBannerComponent } from "./posiwise-resource-module-base-top-banner.component-db9D53MI.mjs";
5
5
  import * as i0 from "@angular/core";
6
6
  import { ChangeDetectionStrategy, Component, NgModule, ViewChild } from "@angular/core";
7
7
  import { HelperService } from "@posiwise/helper-service";
@@ -601,4 +601,4 @@ i0.ɵɵngDeclareClassMetadata({
601
601
  });
602
602
  export { ResourceIntegrationsModule };
603
603
 
604
- //# sourceMappingURL=posiwise-resource-module-resource-integrations.module-D7xWr2Y2.mjs.map
604
+ //# sourceMappingURL=posiwise-resource-module-resource-integrations.module-0Ei4NMHQ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-resource-module-resource-integrations.module-D7xWr2Y2.mjs","names":["i1.ResourceService","i3","i4.ResourceTopBannerEditComponent","i5","i1","i2.ResourceService","i4","i6.ResourceCompanyCardComponent","i7.ResourceNoteCardComponent","i11","i16.IntegrationTopBannerComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-integration/resource-integration.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-integration/resource-integration.component.html","../../../../libs/resource-module/src/lib/public/modules/integrations/resource-integrations.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy,\n ChangeDetectorRef, Component, Injector } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\n\n@Component({\n selector: 'pw-integration-top-banner',\n templateUrl: './integration-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss'\n ],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class IntegrationTopBannerComponent extends BaseTopBannerComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n titleService: Title,\n cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, titleService, cdr, injector);\n }\n\n protected getSearchTerm(): string {\n return 'Integrations';\n }\n}\n","<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Integrated vendors'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n <span class=\"blue-text\"></span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n Browse below the vendor integrations<br />\n we support.\n </p>\n }\n </div>\n <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 <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/men.png'\"\n alt=\"Integrated vendors banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { CompanyData, Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { forkJoin } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-integration',\n templateUrl: './resource-integration.component.html',\n styleUrls: [\n './resource-integration.component.scss',\n '../resources/resources-shared.component.scss'\n ],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceIntegrationComponent extends AppBaseComponent implements OnInit {\n @ViewChild('editIntegrationsModal') editIntegrationsModal: TemplateRef<CustomUploaderComponent>;\n editingIntegrations;\n distributorsData = CompanyData?.distributorsData;\n vendorsData = CompanyData?.vendorsData;\n\n textColor = this.appConfig?.color_codes?.text;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n distributerPosts = [];\n userLoggedIn: boolean;\n blogPostTag;\n isLoaded = false;\n resourcePostTag;\n blogPostVendorTag;\n isMasterSubscription;\n\n integrations = this.appConfig?.pages_config?.integrations;\n\n releaseNotesLink = '/resources/product-release-notes';\n q1NotesLink = '/resources/product-release-q1-2025';\n q3NotesLink = '/resources/product-release-q3-2024';\n q4NotesLink = '/resources/product-release-q4-2024';\n companyName;\n\n videoWebinarLoaded = false;\n videoDemoLoaded = false;\n youtubeVideoId = 'R7Vk219zbhA';\n videoTitle = 'CloudOlive Overview';\n sanitizedMicrosoftVideoUrl: SafeResourceUrl;\n sanitizedKesyaVideoUrl: SafeResourceUrl;\n integrationCountDisplay: number;\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n tagCategory;\n totalPosts: number;\n\n guideData = this.appConfig?.pages_config?.guides;\n editingGuides = { items: [] };\n user: User;\n\n canEditResourcesValue = false;\n domainId = this.appConfig.domain_id;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly resourceService: ResourceService,\n private readonly modalService: NgbModal,\n private readonly tagService: TagService,\n private readonly authService: AuthService,\n private readonly adminService: AdminService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.companyName = this.appConfig.company.name;\n\n document.documentElement.style.setProperty('--text-color', this.textColor);\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n\n this.getTags();\n this.updateCanEditResourcesValue();\n this.cdr.markForCheck();\n });\n } else {\n this.getTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Integrations' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[0];\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n openEditIntegrationsModal(modalRef) {\n this.editingIntegrations = structuredClone(this.integrations);\n this.modalService.open(modalRef, {\n size: 'lg',\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n showIntegrations(): boolean {\n if (this.userLoggedIn) {\n return true;\n }\n\n if (Array.isArray(this.guideData?.items) && this.guideData.items.length) {\n const item = this.guideData.items[0];\n return (\n !!item?.title ||\n !!item?.description ||\n !!item?.guide_url ||\n (!!item?.image_url && !item.image_url.includes('default-image.png'))\n );\n }\n\n return false;\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.resourcePostTag = response.tags.find(\n tag => tag.name === 'Product Release Notes'\n );\n this.blogPostTag = response.tags.find(\n tag =>\n tag.name === 'Integrated Distributors' &&\n tag.tag_category_id === this.tagCategory?.id\n );\n this.blogPostVendorTag = response.tags.find(\n tag =>\n tag.name === 'Integrated Vendors' &&\n tag.tag_category_id === this.tagCategory?.id\n );\n\n // use forkJoin to fetch both sets of posts in parallel\n forkJoin({\n vendorResponse: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n 1,\n 100,\n '',\n '',\n this.blogPostVendorTag?.id\n ),\n distributorResponse: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n 1,\n 100,\n '',\n '',\n this.blogPostTag?.id\n )\n }).subscribe(({ vendorResponse, distributorResponse }) => {\n const sortedVendors = vendorResponse.posts.sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n const sortedDistributors = distributorResponse.posts.sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n\n // Show only integrations that have an image; count still includes all\n this.posts = sortedVendors.filter(post => this.hasDisplayableImage(post));\n this.distributerPosts = sortedDistributors.filter(post =>\n this.hasDisplayableImage(post)\n );\n\n const vendorCount = vendorResponse?.object_count ?? 0;\n const distributorCount = distributorResponse?.object_count ?? 0;\n const total = vendorCount + distributorCount;\n\n this.integrationCountDisplay = total === 0 ? 0 : Math.ceil(total / 10) * 10;\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n this.cdr.markForCheck();\n });\n }\n\n loadMicrosoftVideo(videoUrl) {\n window.open(videoUrl, '_blank', 'noopener,noreferrer');\n }\n\n loadKeseyaVideo(): void {\n const baseUrl = `https://www.youtube.com/embed/${this.youtubeVideoId}?autoplay=1`;\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.sanitizedKesyaVideoUrl = this.sanitizer.bypassSecurityTrustResourceUrl(baseUrl); // NOSONAR\n this.videoWebinarLoaded = true;\n }\n\n addIntegrationItem() {\n this.editingIntegrations.items.push({\n title: '',\n description: '',\n blog_url: '',\n image_url: '',\n video_url: ''\n });\n }\n\n removeIntegrationItem(index: number) {\n this.editingIntegrations.items.splice(index, 1);\n }\n\n dropIntegrationItems(event) {\n moveItemInArray(this.editingIntegrations.items, event.previousIndex, event.currentIndex);\n }\n\n saveIntegrations(modalRef) {\n const updatedIntegrations = {\n ...this.editingIntegrations\n };\n\n this.adminService\n .updateDomainConfig(this.domainId, {\n integrations: updatedIntegrations,\n subscription_id: this.getEffectiveSubscriptionId()\n })\n .subscribe(() => {\n this.integrations = updatedIntegrations;\n this.toast.success('Integrations updated');\n modalRef.close();\n this.cdr.markForCheck();\n });\n }\n\n saveGuides(modalRef) {\n const updatedGuides = {\n ...this.editingGuides\n };\n\n this.adminService\n .updateDomainConfig(this.domainId, {\n guides: updatedGuides,\n subscription_id: this.getEffectiveSubscriptionId()\n })\n .subscribe(() => {\n this.guideData = updatedGuides;\n this.toast.success('Guides updated');\n modalRef.close();\n this.cdr.markForCheck();\n });\n }\n\n openGuidesModal(template) {\n this.editingGuides = structuredClone(this.guideData ?? { items: [] });\n this.modalService.open(template, { size: 'xl' });\n }\n\n addGuide() {\n this.editingGuides.items.push({\n title: '',\n button_text: '',\n image_url: '',\n guide_url: '',\n description: ''\n });\n }\n\n removeGuide(index: number) {\n this.editingGuides.items.splice(index, 1);\n }\n\n dropGuides(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.editingGuides.items, event.previousIndex, event.currentIndex);\n }\n\n private hasDisplayableImage(post: {\n companyImg?: string;\n rectangular_picture?: { url?: string };\n }): boolean {\n if (post?.companyImg) {\n return true;\n }\n const url = post?.rectangular_picture?.url;\n return !!url && !url.includes('default-photo');\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n @if (isLoaded && (posts.length + distributerPosts.length) > 0) {\n <div>\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations <span class=\"int-title__sub\">(&amp; counting)</span></h1>\n <p class=\"int-text\">Search the current list of {{ companyName }} vendor and distributor integrations below.</p>\n </div>\n }\n @if (isLoaded) {\n <pw-resource-company-card [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\"\n >\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (integrationCountDisplay === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (isLoaded && (posts.length + distributerPosts.length) > 0) {\n <div class=\"text-center pt-3 mt-4\">\n <p class=\"see-span\">Don&rsquo;t see what you&rsquo;re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"int-span team-span\">Speak with our team to request a connection <i class=\"fa fa-chevron-right team-span__icon\" aria-hidden=\"true\"></i></a>\n </p>\n </div>\n }\n </div>\n\n</section>\n<section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n @if (isLoaded) {\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\"\n >\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (integrationCountDisplay === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n </div>\n\n</section>\n@if (integrations) {\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h2 class=\"it-works-title mb-0\">{{ integrations?.title || 'How it works' }}</h2>\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n }\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n @if (integrations?.items?.length > 0) {\n @for (integration of integrations?.items; track integration) {\n @if (integration?.image_url || integration?.title || integration?.description) {\n <div\n class=\"col-md-6\"\n >\n @if (integration?.video_url && integration?.video_url.includes('https')) {\n <div class=\"d-flex justify-content-center cursor-pointer\">\n @if (integration?.video_url) {\n <img\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n }\n </div>\n } @else {\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n }\n </div>\n }\n }\n } @else {\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n}\n@if (showIntegrations()) {\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h2 class=\"guide-title mb-3\">{{ guideData?.items?.[0]?.title || 'Featured guide' }}</h2>\n @if (canEditResourcesValue) {\n <button type=\"button\"\n class=\"in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit featured guide\"\n aria-label=\"Edit featured guide\">\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items?.[0]?.description || (canEditResourcesValue ? 'Add a featured guide via Admin &rarr; Domain config &rarr; Integrations.' : 'A practical walkthrough of how to get the most from your integrations.')\">\n </p>\n @if (guideData?.items?.[0]?.guide_url) {\n <a class=\"vault-btn\"\n [href]=\"guideData?.items?.[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{ guideData?.items?.[0]?.button_text || 'View the guide' }} <i class=\"fa fa-chevron-right vault-btn__icon\" aria-hidden=\"true\"></i>\n </a>\n }\n </div>\n <div class=\"col-md-6 text-center\">\n @if (guideData?.items?.[0]?.image_url && !guideData?.items?.[0]?.image_url?.includes('default-photo.jpg')) {\n <img\n [src]=\"guideData?.items?.[0]?.image_url\"\n alt=\"\"\n class=\"guide-img\"\n loading=\"lazy\" />\n }\n </div>\n </div>\n </div>\n </section>\n}\n</div>\n\n@if (resourcePostTag?.tag_category_id) {\n <pw-resource-note-card [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\"\n aria-label=\"Integration Title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"\n aria-label=\"Integration Description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n @for (integration of editingIntegrations.items; track integration; let i = $index) {\n <div class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <span class=\"pw-label-style form-label mb-0\" id=\"integration-item-label\">Integration Item</span>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" id=\"input_integration.title_7712\" name=\"input_integration.title_7712\"\n aria-label=\"Input Integration.title 7712\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" id=\"input_integration.description_9056\" name=\"input_integration.description_9056\"\n aria-label=\"Input Integration.description 9056\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" id=\"input_integration.blog_url_7856\" name=\"input_integration.blog_url_7856\"\n aria-label=\"Input Integration.blog Url 7856\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" id=\"input_integration.image_url_9056\" name=\"input_integration.image_url_9056\"\n aria-label=\"Input Integration.image Url 9056\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" id=\"input_integration.video_url_9056\" name=\"input_integration.video_url_9056\"\n aria-label=\"Input Integration.video Url 9056\" />\n </div>\n </div>\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n }\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n @for (guide of editingGuides.items; track guide; let i = $index) {\n <div class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" id=\"input_guide.title_7072\" name=\"input_guide.title_7072\"\n aria-label=\"Input Guide.title 7072\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" id=\"input_guide.button_text_7712\" name=\"input_guide.button_text_7712\"\n aria-label=\"Input Guide.button Text 7712\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" id=\"input_guide.image_url_7856\" name=\"input_guide.image_url_7856\"\n aria-label=\"Input Guide.image Url 7856\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" id=\"input_guide.guide_url_6944\" name=\"input_guide.guide_url_6944\"\n aria-label=\"Input Guide.guide Url 6944\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" [name]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n }\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { IntegrationTopBannerComponent } from '../../components/resource-integration/integration-top-banner/integration-top-banner.component';\nimport { ResourceIntegrationComponent } from '../../components/resource-integration/resource-integration.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceIntegrationComponent,\n data: {\n title: 'Resources - Integrations',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceIntegrationComponent, IntegrationTopBannerComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceIntegrationsModule {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-resource-module-resource-integrations.module-0Ei4NMHQ.mjs","names":["i1.ResourceService","i3","i4.ResourceTopBannerEditComponent","i5","i1","i2.ResourceService","i4","i6.ResourceCompanyCardComponent","i7.ResourceNoteCardComponent","i11","i16.IntegrationTopBannerComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-integration/integration-top-banner/integration-top-banner.component.html","../../../../libs/resource-module/src/lib/public/components/resource-integration/resource-integration.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-integration/resource-integration.component.html","../../../../libs/resource-module/src/lib/public/modules/integrations/resource-integrations.module.ts"],"sourcesContent":["import { ChangeDetectionStrategy,\n ChangeDetectorRef, Component, Injector } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\n\nimport { ResourceService } from '../../../../resource.service';\nimport { BaseTopBannerComponent } from '../../base/base-top-banner.component';\n\n@Component({\n selector: 'pw-integration-top-banner',\n templateUrl: './integration-top-banner.component.html',\n styleUrls: [\n '../../resource-case-studies/resource-case-studies.component.scss',\n '../../resources/resources-shared.component.scss',\n '../../resource-post/related-resources/related-resources.component.scss'\n ],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class IntegrationTopBannerComponent extends BaseTopBannerComponent {\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n titleService: Title,\n cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, titleService, cdr, injector);\n }\n\n protected getSearchTerm(): string {\n return 'Integrations';\n }\n}\n","<section class=\"bg-white pricing-section\">\n <div class=\"resource-banner\">\n @if (isLoaded) {\n <div class=\"container d-flex flex-column flex-lg-row align-items-center justify-content-between\">\n <div class=\"text-content\">\n <div class=\"resource-heading\">\n <h1 class=\"resource-header-text mb-4\">\n <span class=\"d-inline-flex align-items-center gap-2 flex-wrap\">\n <span [innerHTML]=\"blogPostTag?.title || 'Integrated vendors'\"></span>\n @if (canEditResourcesValue) {\n <pw-resource-top-banner-edit\n [blogPostTag]=\"blogPostTag\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"\n (getUpdatedTag)=\"getTags()\"\n ></pw-resource-top-banner-edit>\n }\n </span>\n <span class=\"blue-text\"></span>\n </h1>\n </div>\n </div>\n <div class=\"text-extension mt-4\">\n <div class=\"cta-buttons d-flex flex-column justify-between h-100\">\n <div class=\"flex-grow-1\">\n @if (blogPostTag?.description && blogPostTag.description !== 'null' ) {\n <p class=\"intro\" [innerHTML]=\"blogPostTag.description\"></p>\n } @else {\n <p class=\"intro\">\n Browse below the vendor integrations<br />\n we support.\n </p>\n }\n </div>\n <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 <div class=\"image-content ms-lg-5 mt-5 mt-lg-0\">\n <div class=\"resource-math-img\"></div>\n <img class=\"resource-laptop-img dyn-img\"\n [src]=\"(blogPostTag?.image?.url && !(blogPostTag?.image?.url.includes('no_image_uploaded_squared'))) ? blogPostTag?.image?.url : '/assets/img/resource/men.png'\"\n alt=\"Integrated vendors banner\"\n width=\"600\"\n height=\"450\"\n loading=\"eager\"\n fetchpriority=\"high\" />\n </div>\n </div>\n }\n </div>\n</section>\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { CompanyData, Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { CustomUploaderComponent } from '@posiwise/utils';\n\nimport { forkJoin } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-integration',\n templateUrl: './resource-integration.component.html',\n styleUrls: [\n './resource-integration.component.scss',\n '../resources/resources-shared.component.scss'\n ],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceIntegrationComponent extends AppBaseComponent implements OnInit {\n @ViewChild('editIntegrationsModal') editIntegrationsModal: TemplateRef<CustomUploaderComponent>;\n editingIntegrations;\n distributorsData = CompanyData?.distributorsData;\n vendorsData = CompanyData?.vendorsData;\n\n textColor = this.appConfig?.color_codes?.text;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n distributerPosts = [];\n userLoggedIn: boolean;\n blogPostTag;\n isLoaded = false;\n resourcePostTag;\n blogPostVendorTag;\n isMasterSubscription;\n\n integrations = this.appConfig?.pages_config?.integrations;\n\n releaseNotesLink = '/resources/product-release-notes';\n q1NotesLink = '/resources/product-release-q1-2025';\n q3NotesLink = '/resources/product-release-q3-2024';\n q4NotesLink = '/resources/product-release-q4-2024';\n companyName;\n\n videoWebinarLoaded = false;\n videoDemoLoaded = false;\n youtubeVideoId = 'R7Vk219zbhA';\n videoTitle = 'CloudOlive Overview';\n sanitizedMicrosoftVideoUrl: SafeResourceUrl;\n sanitizedKesyaVideoUrl: SafeResourceUrl;\n integrationCountDisplay: number;\n contactUsUrl = this.appConfig?.pages_config?.contact_us?.url;\n tagCategory;\n totalPosts: number;\n\n guideData = this.appConfig?.pages_config?.guides;\n editingGuides = { items: [] };\n user: User;\n\n canEditResourcesValue = false;\n domainId = this.appConfig.domain_id;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly resourceService: ResourceService,\n private readonly modalService: NgbModal,\n private readonly tagService: TagService,\n private readonly authService: AuthService,\n private readonly adminService: AdminService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.companyName = this.appConfig.company.name;\n\n document.documentElement.style.setProperty('--text-color', this.textColor);\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.cdr.markForCheck();\n });\n this.authService.getToken$().subscribe(res => {\n this.userLoggedIn = !!res;\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.userService.getUserInfo().subscribe(data => {\n this.user = data;\n\n this.getTags();\n this.updateCanEditResourcesValue();\n this.cdr.markForCheck();\n });\n } else {\n this.getTags();\n }\n this.cdr.markForCheck();\n });\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Integrations' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.tag_categories?.[0];\n this.getPostTags();\n this.cdr.markForCheck();\n });\n }\n\n openEditIntegrationsModal(modalRef) {\n this.editingIntegrations = structuredClone(this.integrations);\n this.modalService.open(modalRef, {\n size: 'lg',\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n showIntegrations(): boolean {\n if (this.userLoggedIn) {\n return true;\n }\n\n if (Array.isArray(this.guideData?.items) && this.guideData.items.length) {\n const item = this.guideData.items[0];\n return (\n !!item?.title ||\n !!item?.description ||\n !!item?.guide_url ||\n (!!item?.image_url && !item.image_url.includes('default-image.png'))\n );\n }\n\n return false;\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.resourcePostTag = response.tags.find(\n tag => tag.name === 'Product Release Notes'\n );\n this.blogPostTag = response.tags.find(\n tag =>\n tag.name === 'Integrated Distributors' &&\n tag.tag_category_id === this.tagCategory?.id\n );\n this.blogPostVendorTag = response.tags.find(\n tag =>\n tag.name === 'Integrated Vendors' &&\n tag.tag_category_id === this.tagCategory?.id\n );\n\n // use forkJoin to fetch both sets of posts in parallel\n forkJoin({\n vendorResponse: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n 1,\n 100,\n '',\n '',\n this.blogPostVendorTag?.id\n ),\n distributorResponse: this.resourceService.getPublicPosts(\n this.getEffectiveSubscriptionId(),\n 1,\n 100,\n '',\n '',\n this.blogPostTag?.id\n )\n }).subscribe(({ vendorResponse, distributorResponse }) => {\n const sortedVendors = vendorResponse.posts.sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n const sortedDistributors = distributorResponse.posts.sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n\n // Show only integrations that have an image; count still includes all\n this.posts = sortedVendors.filter(post => this.hasDisplayableImage(post));\n this.distributerPosts = sortedDistributors.filter(post =>\n this.hasDisplayableImage(post)\n );\n\n const vendorCount = vendorResponse?.object_count ?? 0;\n const distributorCount = distributorResponse?.object_count ?? 0;\n const total = vendorCount + distributorCount;\n\n this.integrationCountDisplay = total === 0 ? 0 : Math.ceil(total / 10) * 10;\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n this.cdr.markForCheck();\n });\n }\n\n loadMicrosoftVideo(videoUrl) {\n window.open(videoUrl, '_blank', 'noopener,noreferrer');\n }\n\n loadKeseyaVideo(): void {\n const baseUrl = `https://www.youtube.com/embed/${this.youtubeVideoId}?autoplay=1`;\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.sanitizedKesyaVideoUrl = this.sanitizer.bypassSecurityTrustResourceUrl(baseUrl); // NOSONAR\n this.videoWebinarLoaded = true;\n }\n\n addIntegrationItem() {\n this.editingIntegrations.items.push({\n title: '',\n description: '',\n blog_url: '',\n image_url: '',\n video_url: ''\n });\n }\n\n removeIntegrationItem(index: number) {\n this.editingIntegrations.items.splice(index, 1);\n }\n\n dropIntegrationItems(event) {\n moveItemInArray(this.editingIntegrations.items, event.previousIndex, event.currentIndex);\n }\n\n saveIntegrations(modalRef) {\n const updatedIntegrations = {\n ...this.editingIntegrations\n };\n\n this.adminService\n .updateDomainConfig(this.domainId, {\n integrations: updatedIntegrations,\n subscription_id: this.getEffectiveSubscriptionId()\n })\n .subscribe(() => {\n this.integrations = updatedIntegrations;\n this.toast.success('Integrations updated');\n modalRef.close();\n this.cdr.markForCheck();\n });\n }\n\n saveGuides(modalRef) {\n const updatedGuides = {\n ...this.editingGuides\n };\n\n this.adminService\n .updateDomainConfig(this.domainId, {\n guides: updatedGuides,\n subscription_id: this.getEffectiveSubscriptionId()\n })\n .subscribe(() => {\n this.guideData = updatedGuides;\n this.toast.success('Guides updated');\n modalRef.close();\n this.cdr.markForCheck();\n });\n }\n\n openGuidesModal(template) {\n this.editingGuides = structuredClone(this.guideData ?? { items: [] });\n this.modalService.open(template, { size: 'xl' });\n }\n\n addGuide() {\n this.editingGuides.items.push({\n title: '',\n button_text: '',\n image_url: '',\n guide_url: '',\n description: ''\n });\n }\n\n removeGuide(index: number) {\n this.editingGuides.items.splice(index, 1);\n }\n\n dropGuides(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.editingGuides.items, event.previousIndex, event.currentIndex);\n }\n\n private hasDisplayableImage(post: {\n companyImg?: string;\n rectangular_picture?: { url?: string };\n }): boolean {\n if (post?.companyImg) {\n return true;\n }\n const url = post?.rectangular_picture?.url;\n return !!url && !url.includes('default-photo');\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<pw-resource-header [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-header>\n<pw-integration-top-banner></pw-integration-top-banner>\n<div class=\"bg-white\">\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container sec-container\">\n @if (isLoaded && (posts.length + distributerPosts.length) > 0) {\n <div>\n <h1 class=\"int-title mb-0\">{{ integrationCountDisplay }}+ integrations <span class=\"int-title__sub\">(&amp; counting)</span></h1>\n <p class=\"int-text\">Search the current list of {{ companyName }} vendor and distributor integrations below.</p>\n </div>\n }\n @if (isLoaded) {\n <pw-resource-company-card [header]=\"'integrated vendors'\"\n (getPosts)=\"getPostTags()\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [data]=\"posts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\"\n >\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (integrationCountDisplay === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (isLoaded && (posts.length + distributerPosts.length) > 0) {\n <div class=\"text-center pt-3 mt-4\">\n <p class=\"see-span\">Don&rsquo;t see what you&rsquo;re after? <a [href]=\"contactUsUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"int-span team-span\">Speak with our team to request a connection <i class=\"fa fa-chevron-right team-span__icon\" aria-hidden=\"true\"></i></a>\n </p>\n </div>\n }\n </div>\n\n</section>\n<section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n @if (isLoaded) {\n <pw-resource-company-card [header]=\"'integrated Distributors'\"\n [integrationCountDisplay]=\"integrationCountDisplay\"\n [vendor]=\"true\"\n (getPosts)=\"getPostTags()\"\n [data]=\"distributerPosts\"\n [user]=\"user\"\n [userLoggedIn]=\"userLoggedIn\"></pw-resource-company-card>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\"\n >\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (integrationCountDisplay === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n </div>\n\n</section>\n@if (integrations) {\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <div class=\"how-it-works-wrapper\">\n <div class=\"d-flex\">\n <h2 class=\"it-works-title mb-0\">{{ integrations?.title || 'How it works' }}</h2>\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.enter)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n (keydown.space)=\"openEditIntegrationsModal(editIntegrationsModal)\"\n title=\"Edit Integrations Section\"></i>\n }\n </div>\n <p class=\"pb-20\" [innerHTML]=\"integrations?.description || 'View short example videos to understand how these integrations can work for you:'\"></p>\n <div class=\"row section-row\" [ngClass]=\"{ 'justify-content-center': integrations?.items?.length === 1 }\">\n @if (integrations?.items?.length > 0) {\n @for (integration of integrations?.items; track integration) {\n @if (integration?.image_url || integration?.title || integration?.description) {\n <div\n class=\"col-md-6\"\n >\n @if (integration?.video_url && integration?.video_url.includes('https')) {\n <div class=\"d-flex justify-content-center cursor-pointer\">\n @if (integration?.video_url) {\n <img\n [src]=\"integration?.image_url\"\n (click)=\"loadMicrosoftVideo(integration?.video_url)\"\n (keydown.enter)=\"loadMicrosoftVideo(integration?.video_url)\"\n class=\"how-it-works-img\"\n alt=\"Integration Video Thumbnail\"\n />\n }\n </div>\n } @else {\n <div class=\"d-flex justify-content-center\">\n <div class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'No video found' | transloco\">\n </pw-no-data>\n </div>\n </div>\n }\n </div>\n }\n }\n } @else {\n <div class=\"w-100 text-center\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Integration.NoDataMessage' | transloco\"></pw-no-data>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n}\n@if (showIntegrations()) {\n <section class=\"guide-section bg-white py-5 section-outer\">\n <div class=\"container\">\n <div class=\"row align-items-start\">\n <div class=\"col-md-6 text-md-start text-center\">\n <div class=\"d-flex\">\n <h2 class=\"guide-title mb-3\">{{ guideData?.items?.[0]?.title || 'Featured guide' }}</h2>\n @if (canEditResourcesValue) {\n <button type=\"button\"\n class=\"in-page-edit-icon text-black ms-4 mt-3 cursor-pointer\"\n (click)=\"openGuidesModal(guidesEditModal)\"\n title=\"Edit featured guide\"\n aria-label=\"Edit featured guide\">\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <p class=\"guide-subtext\"\n [innerHTML]=\"guideData?.items?.[0]?.description || (canEditResourcesValue ? 'Add a featured guide via Admin &rarr; Domain config &rarr; Integrations.' : 'A practical walkthrough of how to get the most from your integrations.')\">\n </p>\n @if (guideData?.items?.[0]?.guide_url) {\n <a class=\"vault-btn\"\n [href]=\"guideData?.items?.[0]?.guide_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{ guideData?.items?.[0]?.button_text || 'View the guide' }} <i class=\"fa fa-chevron-right vault-btn__icon\" aria-hidden=\"true\"></i>\n </a>\n }\n </div>\n <div class=\"col-md-6 text-center\">\n @if (guideData?.items?.[0]?.image_url && !guideData?.items?.[0]?.image_url?.includes('default-photo.jpg')) {\n <img\n [src]=\"guideData?.items?.[0]?.image_url\"\n alt=\"\"\n class=\"guide-img\"\n loading=\"lazy\" />\n }\n </div>\n </div>\n </div>\n </section>\n}\n</div>\n\n@if (resourcePostTag?.tag_category_id) {\n <pw-resource-note-card [categoryId]=\"resourcePostTag?.tag_category_id\" [tag]=\"resourcePostTag\" [releaseHeader]=\"true\" [resourceTitle]=\"resourcePostTag?.title\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-resource-note-card>\n}\n\n<pw-trial-4-contact-us [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-trial-4-contact-us>\n\n\n\n<ng-template #editIntegrationsModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Integrations Section</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-title\">Title</label>\n <input class=\"form-control\" id=\"integration-title\" [(ngModel)]=\"editingIntegrations.title\"\n aria-label=\"Integration Title\" />\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"integration-description\">Description</label>\n <textarea class=\"form-control\" id=\"integration-description\" rows=\"3\" [(ngModel)]=\"editingIntegrations.description\"\n aria-label=\"Integration Description\"></textarea>\n </div>\n\n <div cdkDropList (cdkDropListDropped)=\"dropIntegrationItems($event)\">\n @for (integration of editingIntegrations.items; track integration; let i = $index) {\n <div class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <span class=\"pw-label-style form-label mb-0\" id=\"integration-item-label\">Integration Item</span>\n <i class=\"fa fa-bars cursor-move in-page-bars-icon\" cdkDragHandle></i>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'integration-item-title-' + i\" [(ngModel)]=\"integration.title\" id=\"input_integration.title_7712\" name=\"input_integration.title_7712\"\n aria-label=\"Input Integration.title 7712\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-description-' + i\">Description</label>\n <input class=\"form-control\" [id]=\"'integration-item-description-' + i\" [(ngModel)]=\"integration.description\" id=\"input_integration.description_9056\" name=\"input_integration.description_9056\"\n aria-label=\"Input Integration.description 9056\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-blog-url-' + i\">Blog URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-blog-url-' + i\" [(ngModel)]=\"integration.blog_url\" id=\"input_integration.blog_url_7856\" name=\"input_integration.blog_url_7856\"\n aria-label=\"Input Integration.blog Url 7856\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-image-url-' + i\" [(ngModel)]=\"integration.image_url\" id=\"input_integration.image_url_9056\" name=\"input_integration.image_url_9056\"\n aria-label=\"Input Integration.image Url 9056\" />\n </div>\n <div class=\"col-md-12 mb-2\">\n <label class=\"form-label\" [for]=\"'integration-item-video-url-' + i\">Video URL</label>\n <input class=\"form-control\" [id]=\"'integration-item-video-url-' + i\" [(ngModel)]=\"integration.video_url\" id=\"input_integration.video_url_9056\" name=\"input_integration.video_url_9056\"\n aria-label=\"Input Integration.video Url 9056\" />\n </div>\n </div>\n <div class=\"d-flex justify-content-end\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeIntegrationItem(i)\" (keydown.enter)=\"removeIntegrationItem(i)\"\n (keydown.space)=\"removeIntegrationItem(i)\"></i>\n </div>\n </div>\n }\n </div>\n\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"addIntegrationItem()\">+ Add Integration</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveIntegrations(modal)\">Save</button>\n </div>\n</ng-template>\n\n\n\n<ng-template #guidesEditModal let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Edit Guides</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n\n <div class=\"modal-body\">\n <h4 class=\"mb-3\">Guides Section</h4>\n\n <div cdkDropList (cdkDropListDropped)=\"dropGuides($event)\">\n @for (guide of editingGuides.items; track guide; let i = $index) {\n <div class=\"border p-3 mb-3\" cdkDrag>\n <div class=\"row\">\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-title-' + i\">Title</label>\n <input class=\"form-control\" [id]=\"'guide-title-' + i\" [(ngModel)]=\"guide.title\" id=\"input_guide.title_7072\" name=\"input_guide.title_7072\"\n aria-label=\"Input Guide.title 7072\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-button-text-' + i\">Button Text</label>\n <input class=\"form-control\" [id]=\"'guide-button-text-' + i\" [(ngModel)]=\"guide.button_text\" id=\"input_guide.button_text_7712\" name=\"input_guide.button_text_7712\"\n aria-label=\"Input Guide.button Text 7712\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-image-url-' + i\">Image URL</label>\n <input class=\"form-control\" [id]=\"'guide-image-url-' + i\" [(ngModel)]=\"guide.image_url\" id=\"input_guide.image_url_7856\" name=\"input_guide.image_url_7856\"\n aria-label=\"Input Guide.image Url 7856\" />\n </div>\n <div class=\"col-md-6 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-url-' + i\">Guide URL</label>\n <input class=\"form-control\" [id]=\"'guide-url-' + i\" [(ngModel)]=\"guide.guide_url\" id=\"input_guide.guide_url_6944\" name=\"input_guide.guide_url_6944\"\n aria-label=\"Input Guide.guide Url 6944\" />\n </div>\n <div class=\"col-12 mb-2\">\n <label class=\"form-label\" [for]=\"'guide-description-' + i\">Description</label>\n <textarea class=\"form-control\" [id]=\"'guide-description-' + i\" [name]=\"'guide-description-' + i\" rows=\"3\" [(ngModel)]=\"guide.description\"></textarea>\n </div>\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <i class=\"fa fa-trash text-danger cursor-pointer\" (click)=\"removeGuide(i)\" (keydown.enter)=\"removeGuide(i)\" (keydown.space)=\"removeGuide(i)\"></i>\n <i class=\"fa fa-bars cursor-move\" cdkDragHandle></i>\n </div>\n </div>\n </div>\n }\n </div>\n\n <button class=\"btn btn-primary mt-2\" (click)=\"addGuide()\">+ Add Guide</button>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-secondary\" (click)=\"modal.dismiss()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"saveGuides(modal)\">Save</button>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { IntegrationTopBannerComponent } from '../../components/resource-integration/integration-top-banner/integration-top-banner.component';\nimport { ResourceIntegrationComponent } from '../../components/resource-integration/resource-integration.component';\nimport { ResourceSharedModule } from '../../shared/resource-shared.module';\n\nconst routes: Routes = [\n {\n path: '',\n component: ResourceIntegrationComponent,\n data: {\n title: 'Resources - Integrations',\n permission: 'Pages.Blog',\n preload: false\n }\n }\n];\n\n@NgModule({\n declarations: [ResourceIntegrationComponent, IntegrationTopBannerComponent],\n imports: [ResourceSharedModule, RouterModule.forChild(routes)]\n})\nexport class ResourceIntegrationsModule {}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { t as ResourceService } from "./posiwise-resource-module-resource.service-B09CoD3d.mjs";
2
- import { o as ResourceCardComponent } from "./posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs";
1
+ import { t as ResourceService } from "./posiwise-resource-module-resource.service-Dyxc3yQ6.mjs";
2
+ import { o as ResourceCardComponent } from "./posiwise-resource-module-resource-cards.module-mbvmvJpV.mjs";
3
3
  import { ResourceSharedModule } from "./posiwise-resource-module.mjs";
4
4
  import * as i0 from "@angular/core";
5
5
  import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, NgModule } from "@angular/core";
@@ -774,4 +774,4 @@ i0.ɵɵngDeclareClassMetadata({
774
774
  });
775
775
  export { ResourcePostModule };
776
776
 
777
- //# sourceMappingURL=posiwise-resource-module-resource-post.module-DijUa5vO.mjs.map
777
+ //# sourceMappingURL=posiwise-resource-module-resource-post.module-C8O8oiWv.mjs.map