{"version":3,"file":"90a890.js","mappings":"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","sources":["webpack://@newday/servicing-main/./src/app/components/passcode/passcode.component.ts","webpack://@newday/servicing-main/./src/app/components/passcode/passcode.component.html","webpack://@newday/servicing-main/./src/app/modules/components/passcode/passcode.module.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n QueryList,\n ViewChildren,\n HostBinding,\n} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n Validators,\n Validator,\n} from '@angular/forms';\nimport { PasscodeDigit } from './../../services/authentication.service';\nimport {\n LoggedOutEntitlement,\n LoggedOutEntitlementsService,\n} from '../../services/logged-out-entitlements.service';\n\n@Component({\n selector: 'passcode-input',\n templateUrl: './passcode.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n // eslint-disable-next-line no-use-before-define\n useExisting: forwardRef(() => PasscodeComponent),\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n // eslint-disable-next-line no-use-before-define\n useExisting: PasscodeComponent,\n },\n ],\n})\nexport class PasscodeComponent implements OnInit, Validator {\n @Input() passcodeInputs = [true, true, true, true, true, true];\n @Input() labelPrefix: string;\n @Input() ariaDescribedBy: string;\n @Input() isToggleable: boolean = false;\n @Input() checkPasscode: boolean = false;\n @Input() validationErrorPrefix: string = 'Passcode';\n @Input() disabled: boolean = false;\n @Input() inputTabindex: number;\n @Input() showHints: boolean = false;\n @Input() id: string = undefined;\n @ViewChildren('input') inputs: QueryList;\n @HostBinding('class.passcode-input') passcodeInputClass = true;\n\n public _name: string = '';\n @Input()\n set name(value: string) {\n if (value.length === 0) return;\n\n this._name = value + '-';\n }\n get name(): string {\n return this._name;\n }\n\n @Output() onInit = new EventEmitter();\n @Output() onUpdate = new EventEmitter();\n @Output() onChangePasscodeVisibility = new EventEmitter();\n\n public loading: boolean = true;\n public passcodeFields: Array = [];\n public passcodeGroup: FormGroup;\n public passcode: Array;\n public valid: boolean = true;\n public inputted: boolean = false;\n public inputHidden: boolean = true;\n public focusedFieldIndex: number = null;\n private control: AbstractControl;\n private onChange: Function = Function.prototype;\n public scaEnabled = false;\n public loadingEntitlements = true;\n\n constructor(\n private loggedOutEntitlementsService: LoggedOutEntitlementsService\n ) {}\n\n ngOnInit() {\n this.bindFields();\n this.initPasscodeFields();\n this.onInit.emit(this.passcodeGroup);\n this.loadEntitlements();\n }\n\n private async loadEntitlements() {\n this.scaEnabled = await this.loggedOutEntitlementsService.hasEntitlement(\n LoggedOutEntitlement.strongCustomerAuthentication\n );\n this.loadingEntitlements = false;\n }\n\n validate(c: AbstractControl): { [key: string]: any } {\n this.control = c;\n\n if (!this.valid) {\n return {\n passcode: true,\n };\n }\n }\n\n writeValue(value: string): void {}\n\n registerOnChange(fn: (_: any) => {}): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {}\n\n formatAndPropagateControlValue(): void {\n const passcodeDigits: PasscodeDigit[] = [];\n\n this.passcode.forEach((digit, position) => {\n if (digit !== null) {\n passcodeDigits.push({\n digit,\n position,\n });\n }\n });\n\n this.onChange(passcodeDigits);\n }\n\n public setFocus(): void {\n if (this.inputs == null || this.inputs.length == 0) return;\n\n let first = true;\n this.inputs.forEach((item) => {\n if (!first) return;\n\n first = false;\n item.nativeElement.focus();\n });\n }\n\n public reset(): void {\n this.valid = true;\n this.inputHidden = true;\n this.initPasscodeFields();\n\n for (let i = 0; i < this.passcodeFields.length; i++)\n this.passcodeFields[i].reset(this.passcodeGroup);\n }\n\n public changePasscodeVisibility(isHidden: boolean): void {\n this.inputHidden = isHidden;\n this.updatePasscodeFields();\n this.onChangePasscodeVisibility.emit(isHidden);\n }\n\n public onFocus(index: number): void {\n this.focusedFieldIndex = index;\n this.updatePasscodeFields();\n this.setPasscodeFieldHighlighted(index, true);\n }\n\n public onBlur(index: number): void {\n if (this.focusedFieldIndex == index) this.focusedFieldIndex = null;\n\n this.updatePasscodeFields();\n this.setPasscodeFieldHighlighted(index, false);\n }\n\n public onKeyUp(e: KeyboardEvent, index: number, fieldId: string): void {\n this.restrictInputLength(index, e.target as HTMLInputElement);\n this.update();\n this.updatePasscodeField(index);\n this.focusNextInput(e.keyCode, fieldId);\n }\n\n public onKeyDown(e: KeyboardEvent, index: number): void {\n const specialKeys = [\n 59, 61, 106, 107, 109, 110, 111, 163, 173, 186, 187, 188, 189, 190, 191,\n 192, 219, 220, 221, 222,\n ];\n const isSpecialKey = specialKeys.indexOf(e.keyCode) > -1;\n const isAlphaKey = e.keyCode >= 65 && e.keyCode <= 90;\n const isNumericKey = this.isNumericKey(e.keyCode);\n\n this.updatePasscodeField(index);\n\n // block invalid keys\n if (isAlphaKey || isSpecialKey || (e.shiftKey && isNumericKey)) {\n e.preventDefault();\n return;\n }\n\n // control number input length on keyup\n if (!this.inputHidden) return;\n\n // delete key\n if (e.keyCode == 8) {\n this.setPasscodeFieldValue(index, '');\n return;\n }\n\n // single number input\n const field = e.target as HTMLInputElement;\n if (\n field == null ||\n field.value == null ||\n field.value.length == 0 ||\n !isNumericKey\n )\n return;\n\n // if highlighted clear value\n if (this.isPasscodeFieldHighlighted(index)) {\n this.setPasscodeFieldValue(index, '');\n return;\n }\n\n e.preventDefault();\n }\n\n public hasErrorInAnyField(): boolean {\n return this.passcodeFields.some(\n (passcode: PasscodeField) => passcode.invalid\n );\n }\n\n public onPaste(e: any): void {\n e.preventDefault();\n }\n\n public submit(): void {\n for (let i = 0; i < this.passcodeFields.length; i++)\n this.passcodeFields[i].markDirty(this.passcodeGroup);\n\n this.updatePasscodeFields();\n this.update();\n\n if (this.control) {\n this.control.updateValueAndValidity();\n }\n }\n\n public passcodeAsString(): string {\n if (this.passcode == undefined || this.passcode.length === 0) return '';\n\n return this.passcode.join('');\n }\n\n get hasLabel() {\n return !!this.showHints && !!this.id;\n }\n\n /* -- private ------ */\n private initPasscodeFields(): void {\n if (this.passcodeInputs == null || this.passcodeInputs.length == 0) {\n this.passcodeFields = new Array();\n return;\n }\n\n const fields = new Array();\n let inputAdded = false;\n for (let i = 0; i < this.passcodeInputs.length; i++) {\n const firstInput = !inputAdded && this.passcodeInputs[i];\n if (firstInput) inputAdded = true;\n\n fields.push(\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n new PasscodeField(\n i,\n this.passcodeInputs[i],\n this.name,\n this.labelPrefix,\n firstInput\n )\n );\n }\n\n this.passcodeFields = fields;\n }\n\n private bindFields(): void {\n const groupConfig = {};\n groupConfig[this.name + 'passcodedigit1'] = new FormControl('', [\n Validators.required,\n Validators.pattern('[0-9]'),\n ]);\n groupConfig[this.name + 'passcodedigit2'] = new FormControl('', [\n Validators.required,\n Validators.pattern('[0-9]'),\n ]);\n groupConfig[this.name + 'passcodedigit3'] = new FormControl('', [\n Validators.required,\n Validators.pattern('[0-9]'),\n ]);\n groupConfig[this.name + 'passcodedigit4'] = new FormControl('', [\n Validators.required,\n Validators.pattern('[0-9]'),\n ]);\n groupConfig[this.name + 'passcodedigit5'] = new FormControl('', [\n Validators.required,\n Validators.pattern('[0-9]'),\n ]);\n groupConfig[this.name + 'passcodedigit6'] = new FormControl('', [\n Validators.required,\n Validators.pattern('[0-9]'),\n ]);\n\n this.passcodeGroup = new FormGroup(groupConfig);\n }\n\n private focusNextInput(keyCode: number, fieldId: string): void {\n if (this.inputs == null || this.inputs.length == 0) return;\n\n if (!this.isNumericKey(keyCode)) return;\n\n let focusNext = false;\n this.inputs.forEach((item) => {\n if (focusNext) {\n item.nativeElement.focus();\n focusNext = false;\n }\n\n if (\n item.nativeElement.value.length > 0 &&\n item.nativeElement.getAttribute('name') == fieldId\n )\n focusNext = true;\n });\n }\n\n private update(): void {\n let valid = true;\n let inputted = true;\n const passcode = new Array();\n\n for (let i = 0; i < this.passcodeFields.length; i++) {\n if (!this.passcodeFields[i].input) passcode.push(null);\n else {\n const digit = Number(\n this.passcodeGroup.controls[this.passcodeFields[i].id].value\n );\n if (digit != NaN) passcode.push(digit);\n else passcode.push(null);\n\n const control = this.passcodeGroup.controls[this.passcodeFields[i].id];\n if (control.value === '')\n // && (control.dirty || control.touched))\n inputted = false;\n\n if (!control.valid && (control.dirty || control.touched)) valid = false;\n }\n }\n\n this.passcode = passcode;\n this.inputted = inputted;\n this.valid = this.checkPasscode\n ? valid && this.checkPasscodeValid(this.passcodeAsString())\n : valid;\n\n this.onUpdate.emit(null);\n }\n\n private restrictInputLength(index: number, field: HTMLInputElement): void {\n if (field == null || field.value == null || field.value.length < 2) return;\n\n this.setPasscodeFieldValue(index, field.value.substring(0, 1));\n }\n\n private isNumericKey(keyCode: number) {\n return (\n (keyCode >= 48 && keyCode <= 57) ||\n (keyCode >= 96 && keyCode <= 105) ||\n keyCode == 229\n );\n }\n\n /* -- PasscodeField calls ------ */\n private updatePasscodeFields(): void {\n for (let i = 0; i < this.passcodeFields.length; i++)\n this.updatePasscodeField(i);\n }\n\n private updatePasscodeField(index: number): void {\n this.passcodeFields[index].update(\n this.passcodeGroup,\n this.focusedFieldIndex\n );\n }\n\n private setPasscodeFieldValue(index: number, value: string): void {\n this.passcodeFields[index].setValue(this.passcodeGroup, value);\n }\n\n private setPasscodeFieldHighlighted(index: number, value: boolean): void {\n return this.passcodeFields[index].setHighlighted(value);\n }\n\n private isPasscodeFieldHighlighted(index: number): boolean {\n return this.passcodeFields[index].highlighted;\n }\n\n private checkPasscodeValid(passcode: string): boolean {\n // all digits\n const passcodeNum = parseInt('1' + passcode);\n if (\n isNaN(passcodeNum) ||\n passcode.length != passcodeNum.toString().length - 1\n )\n return false;\n\n // same digit and sequence checks\n let sameDigit = true;\n let isAscSequence = true;\n let isDescSequence = true;\n for (let i = 0; i < passcode.length - 1; i++) {\n if (passcode[i] != passcode[i + 1]) sameDigit = false;\n\n const ascVal = parseInt(passcode[i]) + 1;\n if (\n ascVal > 9 &&\n parseInt(passcode[i + 1]) != 0 &&\n parseInt(passcode[i + 1]) != 1\n )\n isAscSequence = false;\n else if (ascVal <= 9 && ascVal != parseInt(passcode[i + 1]))\n isAscSequence = false;\n\n const descVal = parseInt(passcode[i]) - 1;\n if (\n descVal == 0 &&\n parseInt(passcode[i + 1]) != 0 &&\n parseInt(passcode[i + 1]) != 9\n )\n isDescSequence = false;\n else if (descVal == -1 && parseInt(passcode[i + 1]) != 9)\n isDescSequence = false;\n else if (descVal >= 1 && descVal != parseInt(passcode[i + 1]))\n isDescSequence = false;\n }\n\n return !(sameDigit || isAscSequence || isDescSequence);\n }\n}\n\nclass PasscodeField {\n index: number;\n input: boolean = true;\n id: string = '';\n label: string = '';\n number: string = '';\n focused: boolean = false;\n inputted: boolean = false;\n highlighted: boolean = false;\n invalid: boolean = false;\n\n constructor(\n index: number,\n input: boolean,\n idPrefix: string,\n labelPrefix: string,\n firstInput: boolean\n ) {\n this.index = index;\n this.input = input;\n\n const num = index + 1;\n this.id = idPrefix + 'passcodedigit' + num;\n this.number = this.getNumber(num);\n\n if (labelPrefix) {\n this.label = labelPrefix;\n } else {\n this.label = 'Enter passcode';\n }\n\n this.label += ', ' + this.number + ' digit';\n }\n\n public update(form: FormGroup, focusedIndex: number): void {\n const field = form.controls[this.id];\n\n this.setFocused(focusedIndex);\n this.setInputted(field);\n this.setInvalid(field);\n }\n\n public setValue(form: FormGroup, value: string): void {\n this.inputted = value != '';\n\n const field = form.controls[this.id];\n field.setValue(value);\n\n this.highlighted = false;\n }\n\n public setHighlighted(value: boolean): void {\n this.highlighted = value && this.focused && this.inputted;\n }\n\n public reset(form: FormGroup): void {\n this.focused = false;\n this.inputted = false;\n this.invalid = false;\n\n if (form == null) return;\n\n const field = form.controls[this.id];\n field.setValue('');\n field.markAsPristine();\n field.markAsUntouched();\n }\n\n public markDirty(form: FormGroup): void {\n if (!this.input) return;\n\n form.controls[this.id].markAsDirty();\n }\n\n private getNumber(index: number): string {\n let prefix = 'th';\n\n switch (index) {\n case 1:\n prefix = 'st';\n break;\n case 2:\n prefix = 'nd';\n break;\n case 3:\n prefix = 'rd';\n break;\n }\n\n return index + prefix;\n }\n\n private setFocused(focusedIndex: number): void {\n this.focused = this.index == focusedIndex;\n }\n\n private setInputted(field: AbstractControl): void {\n const value = field.value;\n this.inputted = value != null && value.toString().length > 0;\n }\n\n private setInvalid(field: AbstractControl): void {\n this.invalid = !field.valid && (field.dirty || field.touched);\n }\n}\n","export default \"\\n \\n
\\n Your passcode must be six digits and cannot contain the same six digits,\\n be sequential or match your date of birth.\\n
\\n
\\n\\n \\n
\\n \\n \\n \\n\\n  \\n  \\n  \\n
\\n\\n \\n \\n\\n \\n  \\n   \\n \\n \\n\\n \\n \\n \\n\\n\";","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n// components\nimport { PasscodeComponent } from '../../../components/passcode/passcode.component';\n\n// modules\nimport { ShowSecretToggleModule } from '../show-secret-toggle/show-secret-toggle.module';\n\n@NgModule({\n declarations: [PasscodeComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ShowSecretToggleModule,\n ],\n exports: [PasscodeComponent],\n providers: [],\n})\nexport class PasscodeModule {}\n"],"names":["loggedOutEntitlementsService","passcodeInputs","isToggleable","checkPasscode","validationErrorPrefix","disabled","showHints","id","undefined","passcodeInputClass","_name","onInit","EventEmitter","onUpdate","onChangePasscodeVisibility","loading","passcodeFields","valid","inputted","inputHidden","focusedFieldIndex","onChange","Function","prototype","scaEnabled","loadingEntitlements","PasscodeComponent","this","value","length","ngOnInit","bindFields","initPasscodeFields","emit","passcodeGroup","loadEntitlements","hasEntitlement","validate","c","control","passcode","writeValue","registerOnChange","fn","registerOnTouched","formatAndPropagateControlValue","passcodeDigits","forEach","digit","position","push","setFocus","inputs","first","item","nativeElement","focus","reset","i","changePasscodeVisibility","isHidden","updatePasscodeFields","onFocus","index","setPasscodeFieldHighlighted","onBlur","onKeyUp","e","fieldId","restrictInputLength","target","update","updatePasscodeField","focusNextInput","keyCode","onKeyDown","isSpecialKey","indexOf","isAlphaKey","isNumericKey","shiftKey","preventDefault","field","isPasscodeFieldHighlighted","setPasscodeFieldValue","hasErrorInAnyField","some","invalid","onPaste","submit","markDirty","updateValueAndValidity","passcodeAsString","join","fields","Array","inputAdded","firstInput","PasscodeField","name","labelPrefix","groupConfig","FormControl","Validators","FormGroup","focusNext","getAttribute","input","Number","controls","NaN","dirty","touched","checkPasscodeValid","substring","setValue","setHighlighted","highlighted","passcodeNum","parseInt","isNaN","toString","sameDigit","isAscSequence","isDescSequence","ascVal","descVal","Input","ViewChildren","HostBinding","Output","Component","selector","template","providers","provide","NG_VALUE_ACCESSOR","multi","useExisting","forwardRef","NG_VALIDATORS","idPrefix","label","number","focused","num","getNumber","form","focusedIndex","setFocused","setInputted","setInvalid","markAsPristine","markAsUntouched","markAsDirty","prefix","PasscodeModule","NgModule","declarations","imports","CommonModule","FormsModule","ReactiveFormsModule","exports"],"sourceRoot":""}