File

integration-libs/cdc/components/gigya-raas/gigya-raas.component.ts

Implements

OnInit

Metadata

changeDetection ChangeDetectionStrategy.OnPush
encapsulation ViewEncapsulation.None
selector cx-gigya-raas
styleUrls ./gigya-raas.component.scss
templateUrl ./gigya-raas.component.html

Index

Properties
Methods

Constructor

Public constructor(component: CmsComponentData<GigyaRaasComponentData>, baseSiteService: BaseSiteService, languageService: LanguageService, cdcConfig: CdcConfig, winRef: WindowRef, cdcJSService: CdcJsService, zone: NgZone)
Parameters :
Name Type Optional
component CmsComponentData<GigyaRaasComponentData> No
baseSiteService BaseSiteService No
languageService LanguageService No
cdcConfig CdcConfig No
winRef WindowRef No
cdcJSService CdcJsService No
zone NgZone No

Methods

displayInEmbedMode
displayInEmbedMode(data: GigyaRaasComponentData)

Check if the component should be displayed in embed mode

Parameters :
Name Type Optional Description
data GigyaRaasComponentData No
  • GigyaRaasComponentData
Returns : boolean
displayScreenSet
displayScreenSet(data: GigyaRaasComponentData, lang: string)

Display screen set in embed mode

Parameters :
Name Type Optional Description
data GigyaRaasComponentData No
  • GigyaRaasComponentData
lang string No
  • language
Returns : void
Private getCurrentBaseSite
getCurrentBaseSite()
Returns : string
Protected getSessionExpirationValue
getSessionExpirationValue()
Returns : number
Protected isLoginScreenSet
isLoginScreenSet(data: GigyaRaasComponentData)
Parameters :
Name Type Optional
data GigyaRaasComponentData No
Returns : boolean
ngOnInit
ngOnInit()
Returns : void
showScreenSet
showScreenSet(data: GigyaRaasComponentData, lang: string)

Show screen set

Parameters :
Name Type Optional Description
data GigyaRaasComponentData No
  • GigyaRaasComponentData
lang string No
  • language
Returns : void

Properties

Public component
Type : CmsComponentData<GigyaRaasComponentData>
jsError$
Type : Observable<boolean>
jsLoaded$
Type : Observable<boolean>
language$
Type : Observable<string>
Protected renderScreenSet
Default value : true
import {
  ChangeDetectionStrategy,
  Component,
  NgZone,
  OnInit,
  ViewEncapsulation,
} from '@angular/core';
import { GigyaRaasComponentData } from '@spartacus/cdc/core';
import { CdcConfig, CdcJsService } from '@spartacus/cdc/root';
import { BaseSiteService, LanguageService, WindowRef } from '@spartacus/core';
import { CmsComponentData } from '@spartacus/storefront';
import { Observable } from 'rxjs';
import { distinctUntilChanged, take, tap } from 'rxjs/operators';

@Component({
  selector: 'cx-gigya-raas',
  templateUrl: './gigya-raas.component.html',
  styleUrls: ['./gigya-raas.component.scss'],
  encapsulation: ViewEncapsulation.None,
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class GigyaRaasComponent implements OnInit {
  protected renderScreenSet = true;
  language$: Observable<string>;
  jsError$: Observable<boolean>;
  jsLoaded$: Observable<boolean>;

  public constructor(
    public component: CmsComponentData<GigyaRaasComponentData>,
    private baseSiteService: BaseSiteService,
    private languageService: LanguageService,
    private cdcConfig: CdcConfig,
    private winRef: WindowRef,
    private cdcJSService: CdcJsService,
    private zone: NgZone
  ) {}

  ngOnInit(): void {
    this.jsLoaded$ = this.cdcJSService.didLoad();
    this.jsError$ = this.cdcJSService.didScriptFailToLoad();
    this.language$ = this.languageService.getActive().pipe(
      distinctUntilChanged(),
      // On language change we want to rerender CDC screen with proper translations
      tap(() => (this.renderScreenSet = true))
    );
  }

  /**
   * Display screen set in embed mode
   *
   * @param data - GigyaRaasComponentData
   * @param lang - language
   */
  displayScreenSet(data: GigyaRaasComponentData, lang: string): void {
    if (this.renderScreenSet) {
      this.showScreenSet(data, lang);
    }
    this.renderScreenSet = false;
  }

  /**
   * Show screen set
   *
   * @param data - GigyaRaasComponentData
   * @param lang - language
   */
  showScreenSet(data: GigyaRaasComponentData, lang: string) {
    (this.winRef.nativeWindow as { [key: string]: any })?.[
      'gigya'
    ]?.accounts?.showScreenSet({
      screenSet: data.screenSet,
      startScreen: data.startScreen,
      lang,
      ...(this.displayInEmbedMode(data)
        ? { containerID: data.containerID }
        : {}),
      ...(this.isLoginScreenSet(data)
        ? { sessionExpiration: this.getSessionExpirationValue() }
        : {
            onAfterSubmit: (...params: any[]) => {
              this.zone.run(() =>
                this.cdcJSService.onProfileUpdateEventHandler(...params)
              );
            },
          }),
    });
  }

  protected isLoginScreenSet(data: GigyaRaasComponentData): boolean {
    const profileEditScreen: boolean =
      data.profileEdit === 'true' ? true : false;

    return !profileEditScreen;
  }

  protected getSessionExpirationValue(): number {
    if (this.cdcConfig?.cdc !== undefined) {
      const filteredConfigs: any = this.cdcConfig.cdc.filter(
        (conf) => conf.baseSite === this.getCurrentBaseSite()
      );
      if (filteredConfigs && filteredConfigs.length > 0) {
        return filteredConfigs[0].sessionExpiration;
      }
    }
    // Return a default value
    return 3600;
  }

  private getCurrentBaseSite(): string {
    let baseSite: string = '';
    this.baseSiteService
      .getActive()
      .pipe(take(1))
      .subscribe((data) => (baseSite = data));
    return baseSite;
  }

  /**
   * Check if the component should be displayed in embed mode
   *
   * @param data - GigyaRaasComponentData
   */
  displayInEmbedMode(data: GigyaRaasComponentData): boolean {
    const embedValue: boolean = data.embed === 'true' ? true : false;
    if (embedValue && data.containerID && data.containerID.length > 0) {
      return true;
    }
    return false;
  }
}
<div *ngIf="component.data$ | async as data">
  <div *ngIf="jsLoaded$ | async">
    <div *ngIf="language$ | async as lang">
      <div
        *ngIf="displayInEmbedMode(data); else popupLink"
        [attr.id]="data.containerID"
      >
        {{ displayScreenSet(data, lang) }}
      </div>
      <ng-template #popupLink>
        <a
          class="popup-link"
          [attr.data-cdc-id]="data.uid"
          [attr.data-profile-edit]="data.profileEdit"
          (click)="showScreenSet(data, lang)"
          >{{ data.linkText }}</a
        >
      </ng-template>
    </div>
  </div>
  <div *ngIf="jsError$ | async" class="js-error">
    {{ 'errorHandlers.scriptFailedToLoad' | cxTranslate }}
    {{ 'errorHandlers.refreshThePage' | cxTranslate }}
  </div>
</div>

./gigya-raas.component.scss

cx-gigya-raas {
  .popup-link {
    cursor: pointer;
    color: var(--cx-color-primary);
  }

  .js-error {
    text-align: center;
    padding: 4rem;
  }
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""