@posiwise/resource-module 0.0.196 → 0.0.197
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{posiwise-resource-module-base-top-banner.component-DSirXfem.mjs → posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs} +2 -2
- package/fesm2022/{posiwise-resource-module-base-top-banner.component-DSirXfem.mjs.map → posiwise-resource-module-base-top-banner.component-Bxj0WwXC.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-blogs.module-CScGlSG5.mjs → posiwise-resource-module-resource-blogs.module-C6KzoRWc.mjs} +4 -4
- package/fesm2022/{posiwise-resource-module-resource-blogs.module-CScGlSG5.mjs.map → posiwise-resource-module-resource-blogs.module-C6KzoRWc.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs → posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs} +463 -138
- package/fesm2022/posiwise-resource-module-resource-cards.module-BX8R0Cng.mjs.map +1 -0
- package/fesm2022/{posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs → posiwise-resource-module-resource-case-studies.module-BDIf5gLH.mjs} +3 -3
- package/fesm2022/{posiwise-resource-module-resource-case-studies.module-BtkkgIFa.mjs.map → posiwise-resource-module-resource-case-studies.module-BDIf5gLH.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-events.module-BwK6UfCq.mjs → posiwise-resource-module-resource-events.module-B7xJNXXA.mjs} +10 -202
- package/fesm2022/posiwise-resource-module-resource-events.module-B7xJNXXA.mjs.map +1 -0
- package/fesm2022/{posiwise-resource-module-resource-hub.module-BWvid8gs.mjs → posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs} +7 -7
- package/fesm2022/posiwise-resource-module-resource-hub.module-BIlT8XPx.mjs.map +1 -0
- package/fesm2022/{posiwise-resource-module-resource-integrations.module-G3zPgwRM.mjs → posiwise-resource-module-resource-integrations.module-Bto11niw.mjs} +4 -4
- package/fesm2022/{posiwise-resource-module-resource-integrations.module-G3zPgwRM.mjs.map → posiwise-resource-module-resource-integrations.module-Bto11niw.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-post.module-Cs_ytaXd.mjs → posiwise-resource-module-resource-post.module-DijUa5vO.mjs} +3 -3
- package/fesm2022/{posiwise-resource-module-resource-post.module-Cs_ytaXd.mjs.map → posiwise-resource-module-resource-post.module-DijUa5vO.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-release-notes.module-Bk82KN0U.mjs → posiwise-resource-module-resource-release-notes.module-Dc5O2huO.mjs} +4 -4
- package/fesm2022/{posiwise-resource-module-resource-release-notes.module-Bk82KN0U.mjs.map → posiwise-resource-module-resource-release-notes.module-Dc5O2huO.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-root.module-DP0EMP-_.mjs → posiwise-resource-module-resource-root.module-3WYuuuw6.mjs} +2 -2
- package/fesm2022/{posiwise-resource-module-resource-root.module-DP0EMP-_.mjs.map → posiwise-resource-module-resource-root.module-3WYuuuw6.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-videos.module-smQ7_8vz.mjs → posiwise-resource-module-resource-videos.module-BTPdGGSf.mjs} +4 -4
- package/fesm2022/{posiwise-resource-module-resource-videos.module-smQ7_8vz.mjs.map → posiwise-resource-module-resource-videos.module-BTPdGGSf.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource-white-papers.module-BPzrpciQ.mjs → posiwise-resource-module-resource-white-papers.module-Bonf8OHM.mjs} +4 -4
- package/fesm2022/{posiwise-resource-module-resource-white-papers.module-BPzrpciQ.mjs.map → posiwise-resource-module-resource-white-papers.module-Bonf8OHM.mjs.map} +1 -1
- package/fesm2022/{posiwise-resource-module-resource.service-DjeMJX1O.mjs → posiwise-resource-module-resource.service-B09CoD3d.mjs} +3 -2
- package/fesm2022/posiwise-resource-module-resource.service-B09CoD3d.mjs.map +1 -0
- package/fesm2022/posiwise-resource-module.mjs +12 -12
- package/package.json +1 -1
- package/types/posiwise-resource-module.d.ts +172 -31
- package/fesm2022/posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-events.module-BwK6UfCq.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource-hub.module-BWvid8gs.mjs.map +0 -1
- package/fesm2022/posiwise-resource-module-resource.service-DjeMJX1O.mjs.map +0 -1
|
@@ -4,26 +4,27 @@ import * as i1$1 from "@angular/router";
|
|
|
4
4
|
import * as i1 from "@posiwise/resource-contact-us";
|
|
5
5
|
import { AppBaseComponent } from "@posiwise/app-base-component";
|
|
6
6
|
import { Paging, Resource, ResourcePost, User } from "@posiwise/common-utilities";
|
|
7
|
-
import * as
|
|
7
|
+
import * as i11$2 from "@angular/forms";
|
|
8
8
|
import { FormBuilder, FormGroup } from "@angular/forms";
|
|
9
9
|
import { AuthService, MainApiHttpService, TagService } from "@posiwise/common-services";
|
|
10
10
|
import { CustomUploaderComponent } from "@posiwise/utils";
|
|
11
11
|
import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
-
import * as
|
|
13
|
-
import * as
|
|
14
|
-
import * as
|
|
15
|
-
import * as
|
|
16
|
-
import * as
|
|
17
|
-
import * as
|
|
12
|
+
import * as i9 from "@angular/common";
|
|
13
|
+
import * as i12$1 from "@posiwise/pipes";
|
|
14
|
+
import * as i15 from "@posiwise/shared-components";
|
|
15
|
+
import * as i16$1 from "@posiwise/core-transloco";
|
|
16
|
+
import * as i17 from "@jsverse/transloco";
|
|
17
|
+
import * as i18 from "@posiwise/directives";
|
|
18
18
|
import * as i11$1 from "primeng/inputtext";
|
|
19
19
|
import * as i12 from "primeng/iconfield";
|
|
20
20
|
import * as i13 from "primeng/inputicon";
|
|
21
21
|
import * as i14 from "primeng/textarea";
|
|
22
22
|
import { DomSanitizer, SafeResourceUrl } from "@angular/platform-browser";
|
|
23
|
-
import
|
|
24
|
-
import * as i13$1 from "primeng/
|
|
25
|
-
import * as
|
|
26
|
-
import * as i19 from "
|
|
23
|
+
import { Observable } from "rxjs";
|
|
24
|
+
import * as i13$1 from "primeng/paginator";
|
|
25
|
+
import * as i14$1 from "primeng/select";
|
|
26
|
+
import * as i19 from "@angular/cdk/drag-drop";
|
|
27
|
+
import * as i20 from "ngx-captcha";
|
|
27
28
|
import * as i16 from "@posiwise/alpha-module";
|
|
28
29
|
import * as i4 from "primeng/datepicker";
|
|
29
30
|
import * as i5 from "primeng/autocomplete";
|
|
@@ -176,7 +177,7 @@ export declare class ResourceService {
|
|
|
176
177
|
private readonly resource;
|
|
177
178
|
private readonly comments;
|
|
178
179
|
constructor(api: MainApiHttpService);
|
|
179
|
-
getPublicPosts(master_subscription_id: any, page: number, pageSize: number, search: string, tagCategoryIds?: string, tagIds?: string): import("rxjs").Observable<any>;
|
|
180
|
+
getPublicPosts(master_subscription_id: any, page: number, pageSize: number, search: string, tagCategoryIds?: string, tagIds?: string, extraParams?: Record<string, string | number>): import("rxjs").Observable<any>;
|
|
180
181
|
getAdminPosts(subscriptionId: any, paging?: Paging): import("rxjs").Observable<any>;
|
|
181
182
|
addPost(post: any): import("rxjs").Observable<any>;
|
|
182
183
|
getPostBySlug(slug: string): import("rxjs").Observable<any>;
|
|
@@ -189,6 +190,59 @@ export declare class ResourceService {
|
|
|
189
190
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceService, never>;
|
|
190
191
|
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
191
192
|
}
|
|
193
|
+
/** One page of `/posts/get_all`; `object_count` is the total after filtering. */
|
|
194
|
+
interface ResourcePostsPage<T> {
|
|
195
|
+
posts?: T[];
|
|
196
|
+
object_count?: number;
|
|
197
|
+
}
|
|
198
|
+
/** Sort sent to `/posts/get_all` so that pages line up with the order the cards are shown. */
|
|
199
|
+
declare const NEWEST_PUBLISHED_FIRST: {
|
|
200
|
+
order_by: string;
|
|
201
|
+
order_direction: string;
|
|
202
|
+
};
|
|
203
|
+
/** A post as `/posts/get_all` returns it: the shared `Resource` plus the listing fields. */
|
|
204
|
+
type PublicPost = Resource & {
|
|
205
|
+
showcase?: boolean;
|
|
206
|
+
when?: string;
|
|
207
|
+
};
|
|
208
|
+
/** What to list: the subscription plus a tag category or specific tags. */
|
|
209
|
+
interface PublicPostsQuery {
|
|
210
|
+
subscriptionId: number;
|
|
211
|
+
tagCategoryIds?: string;
|
|
212
|
+
tagIds?: string;
|
|
213
|
+
}
|
|
214
|
+
/** Posts fetched per request on every resources page. */
|
|
215
|
+
declare const RESOURCE_PAGE_SIZE = 15;
|
|
216
|
+
/**
|
|
217
|
+
* Pages through a resources list. Each load keeps fetching until it has added
|
|
218
|
+
* `pageSize` posts that pass `keep` (or the server runs out), so a filter that
|
|
219
|
+
* hides most of a page — showcase only, upcoming events only — never stalls it.
|
|
220
|
+
*/
|
|
221
|
+
declare class ResourcePager<T> {
|
|
222
|
+
private readonly fetchPage;
|
|
223
|
+
private readonly onChange;
|
|
224
|
+
private readonly keep;
|
|
225
|
+
readonly pageSize: number;
|
|
226
|
+
items: T[];
|
|
227
|
+
isLoaded: boolean;
|
|
228
|
+
isLoadingMore: boolean;
|
|
229
|
+
private page;
|
|
230
|
+
private fetched;
|
|
231
|
+
private total;
|
|
232
|
+
private generation;
|
|
233
|
+
constructor(fetchPage: (page: number, pageSize: number) => Observable<ResourcePostsPage<T>>, onChange: () => void, keep?: (post: T) => boolean, pageSize?: number);
|
|
234
|
+
/** A pager over the public `/posts` list, newest-published first. */
|
|
235
|
+
static forPublicPosts(service: ResourceService, query: () => PublicPostsQuery, onChange: () => void, keep: (post: PublicPost) => boolean, pageSize?: number): ResourcePager<PublicPost>;
|
|
236
|
+
get hasMore(): boolean;
|
|
237
|
+
/** Clears the list and loads the first posts. */
|
|
238
|
+
reset(): void;
|
|
239
|
+
/** Appends the next posts; ignored while a load is in flight or nothing is left. */
|
|
240
|
+
loadMore(): void;
|
|
241
|
+
/** Calls `loadMore` when the viewport is near the bottom of the page (browser only). */
|
|
242
|
+
loadMoreIfNearBottom(): void;
|
|
243
|
+
private fetchNext;
|
|
244
|
+
private finish;
|
|
245
|
+
}
|
|
192
246
|
declare namespace resource_video_cards_component_d_exports {
|
|
193
247
|
export { ResourceVideoCardComponent };
|
|
194
248
|
}
|
|
@@ -207,8 +261,11 @@ export declare class ResourceVideoCardComponent extends AppBaseComponent impleme
|
|
|
207
261
|
userLoggedIn: boolean;
|
|
208
262
|
subscriptionId: number;
|
|
209
263
|
masterSubscriptionId: any;
|
|
210
|
-
|
|
211
|
-
|
|
264
|
+
/** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */
|
|
265
|
+
pager: ResourcePager<PublicPost>;
|
|
266
|
+
get posts(): Resource[];
|
|
267
|
+
get isLoaded(): boolean;
|
|
268
|
+
get isLoadingMore(): boolean;
|
|
212
269
|
videoStates: {
|
|
213
270
|
[slug: string]: {
|
|
214
271
|
loaded: boolean;
|
|
@@ -222,7 +279,10 @@ export declare class ResourceVideoCardComponent extends AppBaseComponent impleme
|
|
|
222
279
|
ngOnInit(): void;
|
|
223
280
|
ngOnChanges(changes: SimpleChanges): void;
|
|
224
281
|
loadVideo(post: any): void;
|
|
225
|
-
|
|
282
|
+
loadPosts(): void;
|
|
283
|
+
onWindowScroll(): void;
|
|
284
|
+
/** Gives every loaded video post an embed URL, keeping any it already has. */
|
|
285
|
+
private syncVideoStates;
|
|
226
286
|
toggleTagEditTitle(): void;
|
|
227
287
|
saveEditedTitle(): void;
|
|
228
288
|
/** Helper method to get effective subscription ID */
|
|
@@ -284,13 +344,18 @@ export declare class UpcomingEventCardComponent extends AppBaseComponent impleme
|
|
|
284
344
|
masterSubscriptionId: any;
|
|
285
345
|
posts: Resource[];
|
|
286
346
|
isLoaded: boolean;
|
|
347
|
+
isLoadingMore: boolean;
|
|
348
|
+
pager: ResourcePager<PublicPost>;
|
|
287
349
|
blogPostTag: any;
|
|
288
350
|
isMasterSubscription: any;
|
|
289
351
|
constructor(resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef, injector: Injector);
|
|
290
352
|
ngOnInit(): void;
|
|
291
353
|
ngOnChanges(changes: SimpleChanges): void;
|
|
292
354
|
private getPostTags;
|
|
293
|
-
|
|
355
|
+
/** Reloads in the current mode: paged full list, or the 3-card landing preview. */
|
|
356
|
+
refresh(): void;
|
|
357
|
+
loadUpcoming(): void;
|
|
358
|
+
private syncFromPager;
|
|
294
359
|
isUpcoming(post: any): boolean;
|
|
295
360
|
getAllPosts(page: number, pageSize: number): void;
|
|
296
361
|
toggleEditTitle(): void;
|
|
@@ -332,6 +397,62 @@ export declare class UpcomingEventCardComponent extends AppBaseComponent impleme
|
|
|
332
397
|
};
|
|
333
398
|
}, {}, never, never, false, never>;
|
|
334
399
|
}
|
|
400
|
+
declare namespace replay_event_cards_component_d_exports {
|
|
401
|
+
export { ReplayEventCardComponent };
|
|
402
|
+
}
|
|
403
|
+
declare class ReplayEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {
|
|
404
|
+
private readonly resourceService;
|
|
405
|
+
private readonly tagService;
|
|
406
|
+
private readonly cdr;
|
|
407
|
+
showEventContent: boolean;
|
|
408
|
+
categoryId: string;
|
|
409
|
+
resourceTitle: string;
|
|
410
|
+
user: User;
|
|
411
|
+
canEditResourcesValue: boolean;
|
|
412
|
+
userLoggedIn: boolean;
|
|
413
|
+
subscriptionId: any;
|
|
414
|
+
masterSubscriptionId: any;
|
|
415
|
+
posts: Resource[];
|
|
416
|
+
isLoaded: boolean;
|
|
417
|
+
isLoadingMore: boolean;
|
|
418
|
+
pager: ResourcePager<PublicPost>;
|
|
419
|
+
blogPostTag: any;
|
|
420
|
+
isMasterSubscription: any;
|
|
421
|
+
constructor(resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef, injector: Injector);
|
|
422
|
+
ngOnInit(): void;
|
|
423
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
424
|
+
private getPostTags;
|
|
425
|
+
/** Pages through this list 15 visible posts at a time ("Load more"). */
|
|
426
|
+
loadReplays(): void;
|
|
427
|
+
private syncFromPager;
|
|
428
|
+
/** Helper method to get effective subscription ID */
|
|
429
|
+
private getEffectiveSubscriptionId;
|
|
430
|
+
private updateCanEditResourcesValue;
|
|
431
|
+
canEditResources(): boolean;
|
|
432
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ReplayEventCardComponent, never>;
|
|
433
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ReplayEventCardComponent, "pw-replay-event-card", never, {
|
|
434
|
+
"showEventContent": {
|
|
435
|
+
"alias": "showEventContent";
|
|
436
|
+
"required": false;
|
|
437
|
+
};
|
|
438
|
+
"categoryId": {
|
|
439
|
+
"alias": "categoryId";
|
|
440
|
+
"required": false;
|
|
441
|
+
};
|
|
442
|
+
"resourceTitle": {
|
|
443
|
+
"alias": "resourceTitle";
|
|
444
|
+
"required": false;
|
|
445
|
+
};
|
|
446
|
+
"user": {
|
|
447
|
+
"alias": "user";
|
|
448
|
+
"required": false;
|
|
449
|
+
};
|
|
450
|
+
"userLoggedIn": {
|
|
451
|
+
"alias": "userLoggedIn";
|
|
452
|
+
"required": false;
|
|
453
|
+
};
|
|
454
|
+
}, {}, never, never, false, never>;
|
|
455
|
+
}
|
|
335
456
|
declare namespace resource_cards_component_d_exports {
|
|
336
457
|
export { ResourceCardComponent };
|
|
337
458
|
}
|
|
@@ -349,10 +470,10 @@ export declare class ResourceCardComponent extends AppBaseComponent implements O
|
|
|
349
470
|
resourceLink: any;
|
|
350
471
|
user: User;
|
|
351
472
|
userLoggedIn: boolean;
|
|
352
|
-
|
|
473
|
+
/** Full list (`postSlice`) pages on scroll; the related strip shows 3. */
|
|
474
|
+
pager: ResourcePager<PublicPost>;
|
|
353
475
|
subscriptionId: any;
|
|
354
476
|
masterSubscriptionId: any;
|
|
355
|
-
posts: Resource[];
|
|
356
477
|
isEditingTitle: boolean;
|
|
357
478
|
editedTitle: string;
|
|
358
479
|
isMasterSubscription: any;
|
|
@@ -360,7 +481,12 @@ export declare class ResourceCardComponent extends AppBaseComponent implements O
|
|
|
360
481
|
constructor(injector: Injector, resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef);
|
|
361
482
|
ngOnInit(): void;
|
|
362
483
|
ngOnChanges(changes: SimpleChanges): void;
|
|
363
|
-
|
|
484
|
+
get posts(): Resource[];
|
|
485
|
+
get isLoaded(): boolean;
|
|
486
|
+
get isLoadingMore(): boolean;
|
|
487
|
+
get hasMorePosts(): boolean;
|
|
488
|
+
loadPosts(): void;
|
|
489
|
+
onWindowScroll(): void;
|
|
364
490
|
toggleTagEditTitle(): void;
|
|
365
491
|
saveEditedTitle(): void;
|
|
366
492
|
/** Helper method to get effective subscription ID */
|
|
@@ -426,18 +552,22 @@ export declare class CaseStudyCardComponent extends AppBaseComponent implements
|
|
|
426
552
|
user: User;
|
|
427
553
|
canEditResourcesValue: boolean;
|
|
428
554
|
userLoggedIn: boolean;
|
|
429
|
-
|
|
555
|
+
/** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */
|
|
556
|
+
pager: ResourcePager<PublicPost>;
|
|
557
|
+
get posts(): Resource[];
|
|
558
|
+
get isLoaded(): boolean;
|
|
559
|
+
get isLoadingMore(): boolean;
|
|
430
560
|
subscriptionId: any;
|
|
431
561
|
masterSubscriptionId: any;
|
|
432
562
|
companyName: any;
|
|
433
|
-
posts: Resource[];
|
|
434
563
|
isMasterSubscription: any;
|
|
435
564
|
isEditingTitle: boolean;
|
|
436
565
|
editedTitle: string;
|
|
437
566
|
constructor(injector: Injector, resourceService: ResourceService, tagService: TagService, cdr: ChangeDetectorRef);
|
|
438
567
|
ngOnInit(): void;
|
|
439
568
|
ngOnChanges(changes: SimpleChanges): void;
|
|
440
|
-
|
|
569
|
+
loadPosts(): void;
|
|
570
|
+
onWindowScroll(): void;
|
|
441
571
|
toggleEditTitle(): void;
|
|
442
572
|
saveEditedTitle(): void;
|
|
443
573
|
/** Helper method to get effective subscription ID */
|
|
@@ -506,6 +636,12 @@ export declare class ResourceNoteCardComponent extends AppBaseComponent implemen
|
|
|
506
636
|
releasePosts: {
|
|
507
637
|
[key: string]: Resource[];
|
|
508
638
|
};
|
|
639
|
+
pagers: {
|
|
640
|
+
[key: string]: ResourcePager<PublicPost>;
|
|
641
|
+
};
|
|
642
|
+
isLoadingMore: {
|
|
643
|
+
[key: string]: boolean;
|
|
644
|
+
};
|
|
509
645
|
tagCategory: any;
|
|
510
646
|
isEditingTitle: boolean;
|
|
511
647
|
isPressEditingTitle: boolean;
|
|
@@ -517,11 +653,10 @@ export declare class ResourceNoteCardComponent extends AppBaseComponent implemen
|
|
|
517
653
|
private getTags;
|
|
518
654
|
private getPostTags;
|
|
519
655
|
private findTag;
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
private getProcessedPosts;
|
|
656
|
+
hasReleases(type: string): boolean;
|
|
657
|
+
/** Full page: newest first, 15 at a time ("Load more"). Landing: the 3 newest. */
|
|
658
|
+
loadReleases(type: string): void;
|
|
659
|
+
private syncFromPager;
|
|
525
660
|
toggleEditTitle(): void;
|
|
526
661
|
toggleEditPressTitle(): void;
|
|
527
662
|
saveEditedTitle(type: any): void;
|
|
@@ -617,12 +752,18 @@ export declare class ResourceVaultComponent extends BaseResourceComponent implem
|
|
|
617
752
|
resourceTitle: any;
|
|
618
753
|
tag: any;
|
|
619
754
|
isLoadedChange: EventEmitter<boolean>;
|
|
755
|
+
/** Full list (`postSlice`) pages on scroll; the landing strip shows 3. */
|
|
756
|
+
pager: ResourcePager<PublicPost>;
|
|
757
|
+
isLoadingMore: boolean;
|
|
758
|
+
private announcedPager;
|
|
620
759
|
isEditingTitle: boolean;
|
|
621
760
|
editedTitle: string;
|
|
622
761
|
constructor(resourceService: ResourceService, tagService: TagService, authService: AuthService, cdr: ChangeDetectorRef, injector: Injector);
|
|
623
762
|
ngOnInit(): void;
|
|
624
763
|
protected getResourceType(): string;
|
|
625
|
-
protected getPosts(
|
|
764
|
+
protected getPosts(): void;
|
|
765
|
+
onWindowScroll(): void;
|
|
766
|
+
private syncFromPager;
|
|
626
767
|
toggleEditTitle(): void;
|
|
627
768
|
saveEditedTitle(): void;
|
|
628
769
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceVaultComponent, never>;
|
|
@@ -699,12 +840,12 @@ declare namespace resource_cards_module_d_exports {
|
|
|
699
840
|
*/
|
|
700
841
|
export declare class ResourceCardsModule {
|
|
701
842
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceCardsModule, never>;
|
|
702
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceCardsModule, [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof ResourceEditCardLazyComponent], [typeof
|
|
843
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceCardsModule, [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ReplayEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof ResourceEditCardLazyComponent], [typeof i9.CommonModule, typeof i1$1.RouterModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i12$1.PipesModule, typeof i13$1.PaginatorModule, typeof i14$1.SelectModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i19.DragDropModule, typeof i20.NgxCaptchaModule, typeof Trial4ContactUsModule], [typeof ResourceVideoCardComponent, typeof UpcomingEventCardComponent, typeof ResourceCardComponent, typeof CaseStudyCardComponent, typeof ResourceNoteCardComponent, typeof ResourceVaultComponent, typeof Trial4ContactUsModule, typeof ResourceEditCardLazyComponent, typeof i13$1.PaginatorModule]>;
|
|
703
844
|
static ɵinj: i0.ɵɵInjectorDeclaration<ResourceCardsModule>;
|
|
704
845
|
}
|
|
705
846
|
export declare class ResourceSharedModule {
|
|
706
847
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceSharedModule, never>;
|
|
707
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceSharedModule, [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent], [typeof
|
|
848
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceSharedModule, [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent], [typeof i9.CommonModule, typeof i1$1.RouterModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i12$1.PipesModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i11$1.InputTextModule, typeof i12.IconFieldModule, typeof i13.InputIconModule, typeof i14.TextareaModule, typeof ResourceCardsModule, typeof i16.HubSpotMeetingsSharedModule], [typeof ResourceCompanyCardComponent, typeof ResourceTopBannerEditComponent, typeof ResourceCardsModule, typeof i16.HubSpotMeetingsSharedModule, typeof i9.CommonModule, typeof i1$1.RouterModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i12$1.PipesModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i11$1.InputTextModule, typeof i12.IconFieldModule, typeof i13.InputIconModule, typeof i14.TextareaModule]>;
|
|
708
849
|
static ɵinj: i0.ɵɵInjectorDeclaration<ResourceSharedModule>;
|
|
709
850
|
}
|
|
710
851
|
declare namespace resource_edit_card_component_d_exports {
|
|
@@ -774,7 +915,7 @@ export declare class ResourceEditCardComponent extends AppBaseComponent implemen
|
|
|
774
915
|
*/
|
|
775
916
|
export declare class ResourceEditModule {
|
|
776
917
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourceEditModule, never>;
|
|
777
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceEditModule, [typeof ResourceEditCardComponent], [typeof
|
|
918
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourceEditModule, [typeof ResourceEditCardComponent], [typeof i9.CommonModule, typeof i11$2.FormsModule, typeof i11$2.ReactiveFormsModule, typeof i4.DatePickerModule, typeof i5.AutoCompleteModule, typeof i15.ResourceSharedComponentsModule, typeof i16$1.CoreTranslocoModule, typeof i17.TranslocoModule, typeof i18.DirectivesModule, typeof i10.QuillModule, typeof i11.UiSwitchModule], [typeof ResourceEditCardComponent]>;
|
|
778
919
|
static ɵinj: i0.ɵɵInjectorDeclaration<ResourceEditModule>;
|
|
779
920
|
}
|
|
780
921
|
export interface ResourceModalContext {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"posiwise-resource-module-resource-cards.module-Bp4BgXL2.mjs","names":["i1.ResourceService","i9.ResourceEditCardLazyComponent","i1.ResourceService","i9.ResourceEditCardLazyComponent","i1.ResourceService","i9.ResourceEditCardLazyComponent","i1.ResourceService","i1.ResourceService","i9.ResourceEditCardLazyComponent","i2.ResourceService","i3","i4","i5","i6","i7","i8","i9","i10.ResourceEditCardLazyComponent","i11","i1.ResourceService","i9.ResourceEditCardLazyComponent"],"sources":["../../../../libs/resource-module/src/lib/public/components/resource-contact-us/resource-contact-us.module.ts","../../../../libs/resource-module/src/lib/public/components/resource-edit-card-lazy/resource-edit-card-lazy.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.ts","../../../../libs/resource-module/src/lib/public/components/reslease-note-card/release-note-card.component.html","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-case-studies/case-studies-cards/case-studies-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-post/related-resources/resource-cards/resource-cards.component.html","../../../../libs/resource-module/src/lib/public/components/base/base-resource.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-vault/resource-vault.component.html","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-videos/resource-video-cards/resource-video-cards.component.html","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.ts","../../../../libs/resource-module/src/lib/public/components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component.html","../../../../libs/resource-module/src/lib/public/shared/resource-cards.module.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { Trial4SharedContactUsModule } from '@posiwise/resource-contact-us';\n\n@NgModule({\n imports: [Trial4SharedContactUsModule],\n exports: [Trial4SharedContactUsModule]\n})\nexport class Trial4ContactUsModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n type SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\n\n/**\n * Lazy-loading wrapper for ResourceEditCard\n */\n@Component({\n selector: 'pw-resource-edit-card-lazy',\n template: `<ng-container #editCardContainer></ng-container>`,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceEditCardLazyComponent implements OnChanges, OnDestroy {\n @ViewChild('editCardContainer', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n @Input() id!: number;\n @Input() resourceData;\n @Input() canEdit = false;\n @Output() updated = new EventEmitter<void>();\n\n private componentRef = null;\n private loading = false;\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n async ngOnChanges(changes: SimpleChanges) {\n if (this.canEdit && !this.componentRef && !this.loading) {\n await this.loadEditCard();\n } else if (!this.canEdit && this.componentRef) {\n this.container.clear();\n this.componentRef = null;\n } else if (this.componentRef && (changes['id'] || changes['resourceData'])) {\n // Update existing component inputs\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n }\n }\n\n private async loadEditCard() {\n if (this.componentRef || this.loading) return; // Prevent double loading\n\n this.loading = true; // Set BEFORE async operation\n\n try {\n // Dynamically import ResourceEditCard component (145 KB)\n const module = await import('../resource-edit-card/resource-edit-card.component');\n const ResourceEditCardComponent = module.ResourceEditCardComponent;\n\n // Ensure container exists and is clear\n if (!this.container) return;\n this.container.clear();\n\n // Create component dynamically (only once)\n this.componentRef = this.container.createComponent(ResourceEditCardComponent);\n this.componentRef.instance.id = this.id;\n this.componentRef.instance.resourceData = this.resourceData;\n this.componentRef.instance.updated.subscribe(() => {\n this.updated.emit();\n this.cdr.markForCheck();\n });\n this.loading = false;\n } catch (error) {\n console.error('Failed to load ResourceEditCard:', error);\n this.loading = false;\n }\n }\n\n ngOnDestroy() {\n this.componentRef?.destroy();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n selector: 'pw-resource-note-card',\n templateUrl: './release-note-card.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceNoteCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() releaseHeader = false;\n @Input() categoryId!: string;\n @Input() isReleasePress = false;\n @Input() isResource = false;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() tag;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n postTags: { [key: string]: { id: string; title: string } } = {};\n releasePosts: { [key: string]: Resource[] } = {};\n\n tagCategory;\n isEditingTitle: boolean;\n isPressEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getTags();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getTags() {\n this.isLoaded = false;\n this.tagService\n .getAllTagCategories({ search: 'Release Notes' }, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.tagCategory = response?.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.postTags['product'] = this.findTag(\n response.tags,\n 'Product Release Notes',\n this.tagCategory?.id\n );\n this.postTags['press'] = this.findTag(\n response.tags,\n 'Press Release Notes',\n this.tagCategory?.id\n );\n\n if (this.postTags['product']?.id) {\n this.getProductReleasePosts(1, 100);\n } else {\n this.isLoaded = true;\n this.releasePosts['product'] = [];\n }\n\n if (this.postTags['press']?.id) {\n this.getPressReleasePosts(1, 100);\n } else {\n this.isLoaded = true;\n this.releasePosts['press'] = [];\n }\n this.cdr.markForCheck();\n });\n }\n\n private findTag(tags, name: string, categoryId: number) {\n return tags.find(tag => tag.name === name && tag.tag_category_id === categoryId);\n }\n\n hasPressReleases(): boolean {\n return this.releasePosts['press']?.length !== 0 && this.isLoaded;\n }\n hasProductReleases(): boolean {\n return this.releasePosts['product']?.length !== 0 && this.isLoaded;\n }\n\n getProductReleasePosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n '',\n this.postTags['product']?.id\n )\n .subscribe(response => {\n const sortedPosts = response.posts\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.releasePosts['product'] = this.getProcessedPosts(sortedPosts);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n getPressReleasePosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n '',\n this.postTags['press']?.id\n )\n .subscribe(response => {\n const sortedPosts = response?.posts\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.releasePosts['press'] = this.getProcessedPosts(sortedPosts);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n private getProcessedPosts(posts: Resource[], sliceCount = 3): Resource[] {\n const cloned = [...posts];\n return this.postSlice ? cloned.reverse() : cloned.slice(0, sliceCount).reverse();\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.postTags['product'].title;\n }\n\n toggleEditPressTitle() {\n this.isPressEditingTitle = true;\n this.editedTitle = this.postTags['press'].title;\n }\n\n saveEditedTitle(type) {\n HelperService.updateTagTitle(\n this.postTags[type],\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.postTags[type].title = this.editedTitle;\n if (type === 'product') {\n this.isEditingTitle = false;\n } else {\n this.isPressEditingTitle = false;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","@if (hasProductReleases()) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (postTags['product']?.title) {\n <span [innerHTML]=\"postTags['product']?.title\"></span>\n } @else {\n Product Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('product')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['product']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasProductReleases()) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['product']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getProductReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url?.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Product Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Product Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n}\n@if (isReleasePress && hasPressReleases()) {\n<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isPressEditingTitle }\">\n @if (!isPressEditingTitle) {\n @if (postTags['press']?.title) {\n <span [innerHTML]=\"postTags['press']?.title\"></span>\n } @else {\n Press Release Notes\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditPressTitle()\" (keydown.enter)=\"toggleEditPressTitle()\" (keydown.space)=\"toggleEditPressTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isPressEditingTitle }\" id=\"input_editedTitle_1600\" name=\"input_editedTitle_1600\"\n aria-label=\"Input Edited Title 1600\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle('press')\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isPressEditingTitle = false\">Cancel</button>\n }\n </h2>\n @if (!postSlice) {\n <a class=\"view-all\" routerLink=\"/resources/release-notes\">VIEW ALL ></a>\n }\n </div>\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (releasePosts['press']?.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (hasPressReleases()) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of releasePosts['press']; track post.id; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPressReleasePosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title\"></p>\n @if (!post.picture?.url.includes('default-photo.jpg')) {\n <img\n src=\"{{ post.picture.url }}\"\n class=\"resource-image mt-auto\"\n alt=\"Press Resource Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n } @else {\n <img\n src=\"assets/img/resource/rocket-box.png\"\n class=\"press-release-icon mt-auto\"\n alt=\"Press Resource Default Icon\"\n width=\"240\"\n height=\"240\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-case-studies-card',\n templateUrl: './case-studies-cards.component.html',\n styleUrls: ['./case-studies-cards.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class CaseStudyCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showCaseStudyHeader = false;\n @Input() categoryId!: string;\n @Input() postSlice = false;\n @Input() tag;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n companyName = this.appConfig.company.name;\n\n posts: Resource[] = [];\n isMasterSubscription;\n\n isEditingTitle = false;\n editedTitle: string;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\" id=\"case-studies\">\n <div class=\"container\">\n @if (showCaseStudyHeader) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n <a class=\"view-all\" routerLink=\"/resources/case-studies\">VIEW ALL ></a>\n </div>\n } @else {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <ng-container *ngTemplateOutlet=\"caseStudyHeaderTemplate\"></ng-container>\n </div>\n }\n\n\n <ng-template #caseStudyHeaderTemplate>\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span>\n <span [innerHTML]=\"resourceTitle\"></span>\n </span>\n } @else {\n Case Studies\n }\n @if (canEditResourcesValue) {\n <i\n class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\"\n (click)=\"toggleEditTitle()\"\n (keydown.enter)=\"toggleEditTitle()\"\n (keydown.space)=\"toggleEditTitle()\"\n title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n\n </h2>\n </ng-template>\n\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"testimonial-box\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <div>\n @if (!post.rectangular_picture.url.includes('default-photo.jpg') ) {\n <img [src]=\"post.rectangular_picture.url\"\n alt=\"IT Partners Logo\"\n class=\"company-logo mb-3\"\n width=\"320\"\n height=\"180\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n }\n <p class=\"mb-4 mt-3 testimonial-section\">\n <span [innerHTML]=\"post.title\"></span>\n </p>\n </div>\n <!-- BOTTOM AVATAR -->\n <div class=\"avatar-container mt-5\">\n @if (post.picture.url && !post.picture.url.includes('default-photo.jpg')) {\n <img [src]=\"post.picture.url\"\n alt=\"User Avatar\"\n class=\"testimonial-avatar\"\n width=\"96\"\n height=\"96\"\n loading=\"lazy\"\n decoding=\"async\" />\n }\n @if (post?.external_url) {\n <a\n class=\"read-more-btn-overlay\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"read-more-btn-overlay\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [routerLink]=\"['/resources/view', post?.slug]\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../../resource.service';\n\n@Component({\n selector: 'pw-resource-cards',\n templateUrl: './resource-cards.component.html',\n styleUrls: ['../../../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() categoryId!: string;\n @Input() isHeaderVisible = true;\n @Input() isRelated = false;\n @Input() resourceTitle!: string;\n @Input() postSlice = false;\n @Input() header;\n @Input() tag;\n @Input() resourceLink;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n isLoaded = false;\n subscriptionId;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isEditingTitle: boolean;\n editedTitle: string;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n constructor(\n injector: Injector,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","<section class=\"resource-vault-section bg-white\">\n <div class=\"container\">\n @if (isHeaderVisible) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Our team's articles\n }\n @if (!isRelated && canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9056\" name=\"input_editedTitle_9056\"\n aria-label=\"Input Edited Title 9056\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" [routerLink]=\"resourceLink\">VIEW ALL ></a>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post; let i = $index) {\n <div class=\"resource-blog-card p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"resource-title\" [innerHTML]=\"post.title \"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\"\n /></a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [href]=\"post.external_url\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>","import { ChangeDetectionStrategy,\n ChangeDetectorRef, Component, Injector, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { forkJoin } from 'rxjs';\n\nimport { ResourceService } from '../../../resource.service';\n\n@Component({\n template: '',\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport abstract class BaseResourceComponent extends AppBaseComponent implements OnInit {\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n posts: Resource[] = [];\n testimonialsPosts: Resource[] = [];\n userLoggedIn: boolean;\n blogPostTag;\n tagCategory;\n blogTestimonialsPostTag;\n isLoaded = false;\n user: User;\n isMasterSubscription;\n\n canEditResourcesValue = false;\n\n constructor(\n protected readonly resourceService: ResourceService,\n protected readonly tagService: TagService,\n private readonly authService: AuthService,\n protected 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.updateCanEditResourcesValue();\n this.initializeComponent();\n this.cdr.markForCheck();\n });\n } else {\n this.initializeComponent();\n }\n this.cdr.markForCheck();\n });\n }\n\n protected initializeComponent() {\n if (this.shouldUseTagCategories()) {\n this.getTags();\n } else {\n this.getPostTags();\n }\n\n if (this.shouldLoadTestimonials()) {\n this.getTestimonialTags();\n }\n }\n\n protected getTags() {\n this.isLoaded = false;\n forkJoin({\n categories: this.tagService.getAllTagCategories(\n { search: this.getSearchTerm() },\n this.getEffectiveSubscriptionId()\n ),\n tags: this.tagService.getTagsByType(\n 'post_categories',\n {},\n this.getEffectiveSubscriptionId()\n )\n })\n .subscribe(({ categories, tags }) => {\n this.tagCategory = categories?.tag_categories?.[0];\n this.blogPostTag = tags.tags.find(\n tag => tag.tag_category_id === this.tagCategory?.id\n );\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === this.getResourceType());\n this.getPosts(1, 100);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n protected getTestimonialTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogTestimonialsPostTag = response.tags.find(\n tag => tag.name === 'Testimonials'\n );\n this.getTestimonialsPosts(1, 100);\n this.cdr.markForCheck();\n });\n }\n\n protected getPosts(page: number, pageSize: number) {\n this.fetchPosts(page, pageSize, this.blogPostTag?.tag_category_id, 'posts');\n }\n\n getTestimonialsPosts(page: number, pageSize: number) {\n this.fetchPosts(\n page,\n pageSize,\n this.blogTestimonialsPostTag?.tag_category_id,\n 'testimonialsPosts'\n );\n }\n\n /** Shared method to fetch posts with common filtering, sorting, and slicing logic */\n private fetchPosts(\n page: number,\n pageSize: number,\n tagCategoryId,\n targetProperty: 'posts' | 'testimonialsPosts'\n ) {\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', tagCategoryId)\n .subscribe(response => {\n const filteredPosts = response.posts\n .filter(post => post.tags?.some(tag => tag.tag_category_id === tagCategoryId))\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n )\n .slice(0, 12);\n\n if (targetProperty === 'posts') {\n this.posts = filteredPosts;\n } else {\n this.testimonialsPosts = filteredPosts;\n }\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n protected getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n\n // Abstract methods that each component must implement\n protected abstract getResourceType(): string;\n\n // Optional methods that can be overridden\n protected getSearchTerm(): string {\n return this.getResourceType();\n }\n\n protected shouldUseTagCategories(): boolean {\n return false;\n }\n\n protected shouldLoadTestimonials(): boolean {\n return false;\n }\n\n private updateCanEditResourcesValue(): void {\n if (this.userLoggedIn && this.user) {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n } else {\n this.canEditResourcesValue = false;\n }\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output\n} from '@angular/core';\n\nimport { AuthService, TagService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../resource.service';\nimport { BaseResourceComponent } from '../base/base-resource.component';\n\n@Component({\n selector: 'pw-resource--vault',\n templateUrl: './resource-vault.component.html',\n styleUrls: ['../resources/resources-shared.component.scss'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ResourceVaultComponent extends BaseResourceComponent implements OnInit {\n @Input() showVaultSection = false;\n @Input() postSlice = false;\n @Input() categoryId;\n @Input() resourceTitle;\n @Input() tag;\n @Output() isLoadedChange = new EventEmitter<boolean>();\n\n isEditingTitle = false;\n editedTitle: string;\n\n constructor(\n resourceService: ResourceService,\n tagService: TagService,\n authService: AuthService,\n cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(resourceService, tagService, authService, cdr, injector);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.getPosts(1, 10);\n }\n\n protected getResourceType(): string {\n return 'Vault';\n }\n\n protected override getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.isLoadedChange.emit(this.isLoaded);\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVaultSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap mb-5\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Whitepapers & Tools\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/white-papers\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"d-flex mt-2 flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track post) {\n <div class=\"resource-blog-card text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n <p class=\"mb-4\" [innerHTML]=\"post.title\"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n loading=\"lazy\"\n />\n </a>\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-resource-video-card',\n templateUrl: './resource-video-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class ResourceVideoCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showVideoSection = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n\n canEditResourcesValue = false;\n @Input() userLoggedIn: boolean;\n\n subscriptionId: number;\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n\n videoStates: { [slug: string]: { loaded: boolean; url: SafeResourceUrl } } = {};\n\n isEditingTitle = false;\n editedTitle: string;\n isMasterSubscription;\n\n constructor(\n private readonly sanitizer: DomSanitizer,\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n }\n this.getPosts(1, 10);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n loadVideo(post): void {\n if (!post.external_url) return;\n\n const slug = post.slug;\n let externalUrl = post.external_url;\n\n // Append autoplay only when clicked\n externalUrl += externalUrl.includes('?') ? '&autoplay=1' : '?autoplay=1';\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n this.videoStates[slug].url = this.sanitizer.bypassSecurityTrustResourceUrl(externalUrl); //NOSONAR\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(this.getEffectiveSubscriptionId(), page, pageSize, '', this.categoryId)\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = this.postSlice ? sortedPosts : [...sortedPosts].slice(0, 3);\n this.posts.forEach(post => {\n if (post.external_url) {\n this.videoStates[post.slug] = {\n loaded: true,\n // baseUrl is a trusted internal source (e.g. YouTube embed URL)\n url: this.sanitizer.bypassSecurityTrustResourceUrl(post.external_url) //NOSONAR\n };\n }\n });\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleTagEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showVideoSection) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n On-Demand Videos\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleTagEditTitle()\" (keydown.enter)=\"toggleTagEditTitle()\" (keydown.space)=\"toggleTagEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_9216\" name=\"input_editedTitle_9216\"\n aria-label=\"Input Edited Title 9216\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/videos\">VIEW ALL ></a>\n </div>\n }\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center video-row\">\n @for (post of posts; track trackByPostId($index, post); let i = $index) {\n <div class=\"resource-blog-card\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, 10)\">\n </pw-resource-edit-card-lazy>\n <p [innerHTML]=\"post.title\" class=\"mb-5\"></p>\n <a [href]=\" post.external_url\" target=\"_blank\">\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid mb-3\"\n [alt]=\"post.title\"\n width=\"640\"\n height=\"360\"\n [attr.loading]=\"i === 0 ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"i === 0 ? 'high' : null\"\n decoding=\"async\" />\n </a>\n <a class=\"resource-btn mt-3\" [href]=\" post.external_url\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Watch now' }}</span>\n <span class=\"arrow\">→</span>\n </a>\n </div>\n }\n </div>\n }\n </div>\n\n</section>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n OnChanges,\n OnInit,\n type SimpleChanges\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { Resource, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { ResourceService } from '../../../../resource.service';\n\n@Component({\n selector: 'pw-upcoming-event-card',\n templateUrl: './upcoming-event-cards.component.html',\n styleUrls: ['../../resources/resources-shared.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n standalone: false\n})\nexport class UpcomingEventCardComponent extends AppBaseComponent implements OnInit, OnChanges {\n @Input() showEventContent = false;\n @Input() categoryId!: string;\n @Input() tag;\n @Input() postSlice = false;\n @Input() resourceTitle!: string;\n @Input() user: User;\n @Input() userLoggedIn: boolean;\n\n canEditResourcesValue = false;\n\n now = Date.now();\n subscriptionId;\n\n isEditingTitle = false;\n editedTitle: string;\n\n masterSubscriptionId = this.appConfig.master_subscription.subscription_id;\n\n posts: Resource[] = [];\n\n isLoaded = false;\n blogPostTag;\n isMasterSubscription;\n\n constructor(\n private readonly resourceService: ResourceService,\n private readonly tagService: TagService,\n private readonly cdr: ChangeDetectorRef,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n if (this.userLoggedIn) {\n this.localStorage.getItem$('product').subscribe(res => {\n const data = res ? JSON.parse(res) : null;\n this.subscriptionId = data?.subscriptionId;\n this.cdr.markForCheck();\n });\n this.getPostTags();\n } else {\n this.getPostTags();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['user'] || changes['userLoggedIn']) {\n if (this.userLoggedIn && this.user) {\n this.updateCanEditResourcesValue();\n }\n }\n }\n\n private getPostTags() {\n this.tagService\n .getTagsByType('post_categories', {}, this.getEffectiveSubscriptionId())\n .subscribe(response => {\n this.blogPostTag = response.tags.find(tag => tag.name === 'Events');\n if (this.blogPostTag?.tag_category_id) {\n if (this.postSlice) {\n this.getPosts(1, 100);\n } else {\n this.getAllPosts(1, 100);\n }\n } else {\n this.isLoaded = true;\n this.cdr.markForCheck();\n }\n this.cdr.markForCheck();\n });\n }\n\n getPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(\n post => post.showcase === true && new Date(post?.when).getTime() > this.now\n )\n .sort(\n (a, b) =>\n new Date(b.published_at).getTime() - new Date(a.published_at).getTime()\n );\n this.posts = sortedPosts;\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n isUpcoming(post): boolean {\n return new Date(post?.when).getTime() > this.now;\n }\n\n getAllPosts(page: number, pageSize: number): void {\n this.isLoaded = false;\n this.resourceService\n .getPublicPosts(\n this.getEffectiveSubscriptionId(),\n page,\n pageSize,\n '',\n this.categoryId ?? this.blogPostTag?.tag_category_id\n )\n .subscribe(response => {\n const sortedPosts = (response.posts ?? [])\n .filter(post => post.showcase === true)\n .sort((a, b) => new Date(b.when).getTime() - new Date(a.when).getTime());\n\n this.posts = [...sortedPosts].slice(0, 3).reverse();\n this.cdr.markForCheck();\n })\n .add(() => {\n this.isLoaded = true;\n this.cdr.markForCheck();\n });\n }\n\n toggleEditTitle() {\n this.isEditingTitle = true;\n this.editedTitle = this.resourceTitle;\n }\n\n saveEditedTitle() {\n HelperService.updateTagTitle(\n this.tag,\n this.editedTitle,\n this.tagService,\n this.getEffectiveSubscriptionId(),\n this.toast\n ).subscribe(() => {\n this.resourceTitle = this.editedTitle;\n this.isEditingTitle = false;\n this.cdr.markForCheck();\n });\n }\n\n /** Helper method to get effective subscription ID */\n private getEffectiveSubscriptionId(): number {\n return HelperService.getEffectiveSubscriptionId(\n this.user,\n this.subscriptionId,\n this.masterSubscriptionId\n );\n }\n private updateCanEditResourcesValue(): void {\n this.canEditResourcesValue = HelperService.canEditResources(\n this.user,\n this.userLoggedIn,\n this.permissionService\n );\n }\n\n canEditResources(): boolean {\n return this.canEditResourcesValue;\n }\n\n trackByPostId(index: number, post: Resource): number {\n return post.id;\n }\n}\n","<section class=\"resource-vault-section bg-white text-center py-5 extra-top-padding section-outer\">\n <div class=\"container\">\n @if (showEventContent) {\n <div class=\"d-flex justify-content-between align-items-center flex-wrap\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Events & Webinars\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_7936\" name=\"input_editedTitle_7936\"\n aria-label=\"Input Edited Title 7936\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n <a class=\"view-all\" routerLink=\"/resources/events\">VIEW ALL ></a>\n </div>\n }\n @if (!showEventContent) {\n <div class=\"d-md-flex justify-content-between align-items-start\">\n <h2 class=\"section-heading d-flex align-items-center\" [ngClass]=\"{ 'w-50': isEditingTitle }\">\n @if (!isEditingTitle) {\n @if (resourceTitle) {\n <span [innerHTML]=\"resourceTitle\"></span>\n } @else {\n Upcoming Events\n }\n @if (canEditResourcesValue) {\n <i class=\"fa fa-edit in-page-edit-icon ms-3 cursor-pointer\" (click)=\"toggleEditTitle()\" (keydown.enter)=\"toggleEditTitle()\" (keydown.space)=\"toggleEditTitle()\" title=\"Edit Title\"></i>\n }\n } @else {\n <input [(ngModel)]=\"editedTitle\" class=\"form-control d-inline w-auto me-2\" [ngClass]=\"{ 'w-100': isEditingTitle }\" id=\"input_editedTitle_7936\" name=\"input_editedTitle_7936\"\n aria-label=\"Input Edited Title 7936\" />\n <button class=\"btn btn-sm btn-primary me-1\" (click)=\"saveEditedTitle()\">Save</button>\n <button class=\"btn btn-sm btn-secondary\" (click)=\"isEditingTitle = false\">Cancel</button>\n }\n </h2>\n </div>\n }\n\n @if (!isLoaded) {\n <div class=\"w-100 text-center mt-3\">\n <p-progress-spinner strokeWidth=\"2\"> </p-progress-spinner>\n </div>\n }\n @if (posts.length === 0 && isLoaded) {\n <div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Resource.NoDataMessage' | transloco\"/>\n </div>\n }\n\n @if (posts.length !== 0 && isLoaded) {\n <div class=\"row mt-5 d-flex flex-wrap justify-content-center gap-4 video-row\">\n @for (post of posts; track trackByPostId($index, post)) {\n <div class=\"resource-blog-card d text-center p-4\">\n <pw-resource-edit-card-lazy\n [canEdit]=\"canEditResourcesValue\"\n [id]=\"post.id\"\n [resourceData]=\"post\"\n (updated)=\"getAllPosts(1, 100)\">\n </pw-resource-edit-card-lazy>\n @if (postSlice) {\n <h5 class=\"badge-title fw-bold\">UPCOMING:</h5>\n } @else {\n <h5 class=\"badge-title fw-bold\">\n {{ isUpcoming(post) ? 'UPCOMING:' : 'REPLAY:' }}\n </h5>\n }\n\n <p class=\"event-title mb-4\" [innerHtml]=\"post?.title\"></p>\n <a\n [href]=\"post.external_url || ('/resources/view/' + post?.slug)\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [attr.aria-label]=\"'Open resource card: ' + (post?.title || 'article')\"\n >\n <img\n [src]=\"post.picture?.url\"\n class=\"img-fluid my-3 mt-auto\"\n alt=\"Webinar\"\n loading=\"lazy\"\n />\n </a>\n\n @if (post?.external_url) {\n <a\n class=\"resource-btn mt-3\"\n [attr.aria-label]=\"'Open external: ' + (post?.title || 'article')\"\n [href]=\"post.external_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">external</span>\n <span class=\"arrow\">→</span>\n </a>\n } @else {\n <a class=\"resource-btn mt-3\" [attr.aria-label]=\"'Read resource: ' + (post?.title || 'article')\" [href]=\"'/resources/view/' + post?.slug\" target=\"_blank\">\n <span>{{ post?.cta_text && post.cta_text !== 'null' ? post.cta_text : 'Read Now' }}</span>\n <span class=\"visually-hidden\">on site</span>\n <span class=\"arrow\">→</span>\n </a>\n }\n </div>\n }\n </div>\n }\n </div>\n</section>\n\n\n@if (!showEventContent) {\n<section class=\"bg-white\">\n <pw-replay-event-card [resourceTitle]=\"resourceTitle\" [user]=\"user\" [userLoggedIn]=\"userLoggedIn\"></pw-replay-event-card>\n</section>\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { ResourceSharedComponentsModule } from '@posiwise/shared-components';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SelectModule } from 'primeng/select';\n\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { ResourceNoteCardComponent } from '../components/reslease-note-card/release-note-card.component';\nimport { CaseStudyCardComponent } from '../components/resource-case-studies/case-studies-cards/case-studies-cards.component';\nimport { Trial4ContactUsModule } from '../components/resource-contact-us/resource-contact-us.module';\nimport { ResourceEditCardLazyComponent } from '../components/resource-edit-card-lazy/resource-edit-card-lazy.component';\nimport { ResourceCardComponent } from '../components/resource-post/related-resources/resource-cards/resource-cards.component';\nimport { ResourceVaultComponent } from '../components/resource-vault/resource-vault.component';\nimport { ResourceVideoCardComponent } from '../components/resource-videos/resource-video-cards/resource-video-cards.component';\nimport { UpcomingEventCardComponent } from '../components/resource-webinars/upcoming-event-cards/upcoming-event-cards.component';\n\n/**\n * Module containing resource card components (lightweight version)\n * ResourceEditCard is lazy-loaded on demand to save 145 KB\n * Trial4ContactUs moved to separate module for better tree-shaking\n * Used by both ResourceRootModule and ResourceSharedModule\n */\n@NgModule({\n declarations: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n ResourceEditCardLazyComponent\n ],\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n PipesModule,\n PaginatorModule,\n SelectModule,\n ResourceSharedComponentsModule,\n CoreTranslocoModule,\n TranslocoModule,\n DirectivesModule,\n DragDropModule,\n NgxCaptchaModule,\n Trial4ContactUsModule // ✅ Import standalone module\n ],\n exports: [\n ResourceVideoCardComponent,\n UpcomingEventCardComponent,\n ResourceCardComponent,\n CaseStudyCardComponent,\n ResourceNoteCardComponent,\n ResourceVaultComponent,\n Trial4ContactUsModule, // ✅ Re-export for backward compatibility\n ResourceEditCardLazyComponent,\n PaginatorModule // Export PaginatorModule so ResourceCompanyCardComponent can use p-paginator\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class ResourceCardsModule {}\n"],"mappings":"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AAA,MAAA;GAAmB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAnB;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,cAAA;IArCxB;IACA;IACA;IACA;IACA;IACA;IACA;GAA6B;GAAA,SAAA;IAG7B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAGA;GAAA,SAAA;IAAA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;;CAIK;EAAA,KAAA,OAAA,GAAA,oBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,SAAA;IA5BxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IASA;IAEA;;;;;AAIK,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAvC/B,MAAA;EAAS,MAAA,CAAA;GACN,cAAc;IACV;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACH;GACD,SAAS,CAAC,sBAAsB;EACnC,CAAA"}
|