src/app/shared/terms/terms.component.ts

Implements

OnInit AfterViewInit

Metadata

Relationships

Used by

Depends on

Index

Properties
Methods

Constructor

constructor(sasService: SasService)
Parameters :
Name Type Optional
sasService SasService No

Methods

ngAfterViewInit
ngAfterViewInit()
Returns : void
ngOnInit
ngOnInit()
Returns : void
onCardBlockScroll
onCardBlockScroll(event: any)
Parameters :
Name Type Optional
event any No
Returns : void
termsAgreeChange
termsAgreeChange()
Returns : void

Properties

Public agreeBoxLocked
Type : boolean
Default value : true
Public agreeChecked
Type : boolean
Default value : false
Public agreeClicked
Type : boolean
Default value : false
Public eula_markdown
Type : unknown
Default value : EULA
markdownCard
Type : ElementRef
Decorators :
@ViewChild('markdownCard')
import {
  AfterViewInit,
  Component,
  ElementRef,
  OnInit,
  ViewChild,
  ViewEncapsulation
} from '@angular/core'
import { SasService } from '../../services/sas.service'
import * as marked from 'marked'
import { EULA } from 'src/environments/_eula'
import { RequestWrapperResponse } from 'src/app/models/request-wrapper/RequestWrapperResponse'

@Component({
  selector: 'app-terms',
  templateUrl: './terms.component.html',
  styleUrls: ['./terms.component.scss'],
  encapsulation: ViewEncapsulation.None,
  standalone: false
})
export class TermsComponent implements OnInit, AfterViewInit {
  @ViewChild('markdownCard') markdownCard!: ElementRef

  public agreeChecked: boolean = false
  public agreeBoxLocked: boolean = true
  public agreeClicked: boolean = false

  public eula_markdown = EULA

  constructor(private sasService: SasService) {}

  ngOnInit(): void {
    const md = marked.marked.setOptions({})
    this.eula_markdown = md.parse(this.eula_markdown)
  }

  ngAfterViewInit(): void {
    // We will fire SCROLL event that will recalculate and enable checkbox in case when
    // licence is short and no scroll is present
    setTimeout(() => {
      if (this.markdownCard)
        this.markdownCard.nativeElement.dispatchEvent(new CustomEvent('scroll'))
    })
  }

  termsAgreeChange() {
    if (!this.agreeChecked) {
      return
    }

    this.agreeBoxLocked = true
    this.agreeClicked = true

    let table = { SASControlTable: [{ ACCEPTED: 'yes' }] }

    this.sasService
      .request(`public/registeruser`, table)
      .then((res: RequestWrapperResponse) => {
        if (
          res.adapterResponse.return &&
          res.adapterResponse.return[0] &&
          res.adapterResponse.return[0].MSG === 'SUCCESS'
        ) {
          location.reload()
        }
      })
      .catch((err: any) => err)
      .finally(() => {
        //Timeout is added to improve UX
        //Without it, spinner would stop, and after one second app is reloaded
        //at that point it gives false impresion that accepting didn't work
        //with timeout spinner is visible all the time until page reloads
        setTimeout(() => {
          this.agreeBoxLocked = false
          this.agreeClicked = false
          this.agreeChecked = false
        }, 1000)
      })
  }

  onCardBlockScroll(event: any) {
    if (!this.agreeClicked) {
      let card_block_el: any = event.target

      if (card_block_el) {
        let pos = card_block_el.scrollTop + card_block_el.offsetHeight
        let max = card_block_el.scrollHeight - 20

        if (pos >= max) {
          this.agreeBoxLocked = false
        } else {
          this.agreeBoxLocked = true
        }
      }
    }
  }
}
<div class="card">
  <div class="card-header">
    End User License Agreement
    <p>
      Welcome to Data Controller for SAS! Please review and accept agreement
      below in order to proceed.
    </p>
  </div>
  <div
    #markdownCard
    class="card-block"
    (scroll)="onCardBlockScroll($event)"
    [innerHTML]="eula_markdown"
  ></div>

  <div class="d-flex clr-align-items-center">
    <clr-checkbox-wrapper
      [class.disabled]="agreeBoxLocked"
      class="accept-checkbox"
    >
      <input
        clrCheckbox
        type="checkbox"
        [(ngModel)]="agreeChecked"
        [disabled]="agreeBoxLocked"
        (change)="termsAgreeChange()"
      />
      <label>I have read and agree to the terms of above.</label>
    </clr-checkbox-wrapper>

    @if (agreeBoxLocked && agreeClicked) {
      <clr-spinner clrInline="small"></clr-spinner>
    }
  </div>
</div>

./terms.component.scss

Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""