{"version":3,"file":"pv-frontend-pv-shared-directives-tracking.mjs","sources":["../../../projects/pv-shared-directives/tracking/tracking.directive.ts","../../../projects/pv-shared-directives/tracking/tracking.module.ts","../../../projects/pv-shared-directives/tracking/pv-frontend-pv-shared-directives-tracking.ts"],"sourcesContent":["import {\n  Directive,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { TypedSimpleChanges } from '@pv-frontend/pv-shared-services/common';\nimport { TelemetryImplService } from '@pv-frontend/pv-shared-services/telemetry-service';\nimport { fromEvent, Subscription } from 'rxjs';\n\n@Directive({\n  selector: '[pvClickTrack]',\n})\nexport class ClickTrackDirective implements OnInit, OnChanges, OnDestroy {\n  private activeSubscriptions: Subscription = new Subscription();\n  private trackedEventLabel: string = '';\n\n  public constructor(\n    private readonly host: ElementRef,\n    private telemetryService: TelemetryImplService\n  ) {}\n\n  /**\n   * Indicates whether the click should be tracked or not for a given element\n   *\n   * The default value is `false`\n   */\n  @Input('pvClickTrack')\n  public shouldTrackClick?: boolean = false;\n\n  /**\n   * The label to be sent for analytics event when the element is clicked.\n   *\n   * In case the click tracking for element is enabled without passing custom label, the text content of the element is sent as label to analytics event\n   */\n  @Input('pvTrackLabel')\n  public label?: string;\n\n  public ngOnInit(): void {\n    this.setupListeners();\n  }\n\n  public ngOnChanges(changes: TypedSimpleChanges<this>): void {\n    if (changes.label) {\n      this.trackedEventLabel = this.getElementLabel(changes.label.currentValue);\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.clearListeners();\n  }\n\n  private setupListeners(): void {\n    this.clearListeners();\n    this.activeSubscriptions = new Subscription();\n    if (this.shouldTrackClick) {\n      this.activeSubscriptions.add(\n        fromEvent<MouseEvent>(this.host.nativeElement, 'click').subscribe(\n          () => {\n            this.telemetryService.trackEvent({\n              eventType: 'click',\n              label: this.getElementLabel(),\n            });\n          }\n        )\n      );\n    }\n  }\n\n  private clearListeners(): void {\n    this.activeSubscriptions.unsubscribe();\n  }\n\n  private getElementLabel(overrideValue?: string | null | undefined): string {\n    return (\n      overrideValue ??\n      this.trackedEventLabel ??\n      (this.host.nativeElement as HTMLElement)?.textContent ??\n      ''\n    ).trim();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ClickTrackDirective } from './tracking.directive';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [ClickTrackDirective],\n  exports: [ClickTrackDirective],\n})\nexport class ClickTrackingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}