Untitled
unknown
javascript
4 years ago
32 kB
4
Indexable
/*************************************************************************************************\
@author: Ben Allington
@company: NHS
@history: BA 15/09/2020 - Created.
*************************************************************************************************/
import { LightningElement, api, track, wire } from 'lwc';
import {fireEvent, registerListener, unregisterListener } from 'c/pubsub';
import {FlowAttributeChangeEvent} from 'lightning/flowSupport';
import { FlowContextProvider } from 'c/nhsFlowContextProvider';
import {scrollToElement, getGridSize, getSanitizedData} from 'c/nhsUtils';
import { CurrentPageReference } from 'lightning/navigation';
import phoneFormat from '@salesforce/resourceUrl/phoneformat';
import { loadScript } from 'lightning/platformResourceLoader';
const ERROR_MESSAGE_DEFAULT = 'Select an option';
const ERROR_MESSAGE_PROHIBITED = 'Your booking reference number must not include special characters, like / # £ : ; or %';
const ERROR_MESSAGE_CHARACTER_LIMIT = 'Your booking reference number must not be more than 12 characters';
const PAGE_ERROR_RADIO_TYPE = 'radioGroup';
const RADIO_CSS_STANDARD = 'nhsuk-radios';
const FORM_GROUP_CSS_STANDARD = 'nhsuk-form-group';
const FORM_GROUP_CSS_STANDARD_ERROR = 'nhsuk-form-group nhsuk-form-group--error';
const BULLET_LIST_DELIMITER = ';';
const INPUT_CSS_STANDARD = 'nhsuk-input';
const INPUT_CSS_STANDARD_INVALID = 'nhsuk-input--error';
const INPUT_WIDTH_CSS_STANDARD = 'nhsuk-input nhsuk-u-width-';
const INVALID_PHONE = ', like +441234567890';
const PHONE_REGEX = /(\+44)[1-9][0-9]\d{7,8}$/;
const INDENTIFY_LETTERS = /^[^a-zA-Z]+$/;
const INVALID_EMAIL = ' in the correct format, like name@example.com';
const INVALID_POSTCODE = 'Enter a postcode, like AA1 1AA';
const EMAIL_REGEX = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
const POST_CODE_REGEX = /([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\s?[0-9][A-Za-z]{2})/g;
const NUMBER_REGEX = /^\d*$/;
const VOWEL_REGEX = /^[aeiou]/i;
const FLOW_VALIDATION_RESP_EVENT_NAME = '@salesforce/messageChannel/LMSFlowValidationResponse__c';
const FLOW_VALIDATION_REQ_EVENT_NAME = '@salesforce/messageChannel/LMSFlowValidationRequest__c';
const SCROLL_TO_EVENT_NAME = '@salesforce/messageChannel/LMSFlowScrollToRequest__c';
const DISPLAYELEMENT_INPUTELEMENT_CONNECTION = '@salesforce/messageChannel/LMSDisplayToInputConnection__c';
export default class RadioButtonElement extends LightningElement {
isSubscribedToValidationRequestEvent = false;
handleValidationRequestHandler;
isSubscribedToScrollToEvent = false;
scrollToHandler;
isSubscribedToConnectionRequestEvent = false;
handleConnectionRequest;
phoneFormatInitialized = false;
@wire(CurrentPageReference) pageRef;
@api titleText;
@api hint1Text;
@api hint2Text;
@api labelText;
@api hintLabelText;
@api selectedRadio;
@api requiredField;
@api hiddenInputLabels;
@api customErrorMessage;
@api customOptionList;
@api useHints;
@api customHintsList;
@api customOptionTypeList;
@api customOptionInputLabelList;
@api inputWidth;
@api enteredValue = null;
@api fieldNameErrorLabel;
@api numberExampleForError;
@api maxChar;
@api minChar;
@api identifier
@api labelForSummary;
@api dependentValueForSummary;
@api dependentLabelForSummary;
@api requiredInSummary;
@api sortOrderNumber;
@track radioOptions = [];
@track pageErrors = [];
@track selectedValue;
@track selectedOptionType;
@track errorShowPhone = false;
@track errorShowInternationalPhone = false;
@track errorShowEmail = false;
@track enteredText = null;
@track errorShowNumber = false;
@track errorShowPostCode = false;
@track invalidNumber;
@track enteredTextLabel = '';
@track inputCssError = false;
@track radiosGenericErrorDetail;
connectedCallback() {
if(!this.phoneFormatInitialized){
loadScript(this, phoneFormat + '/phone-format-global.min.js')
.then(() => {
this.phoneFormatInitialized = true;
this.handleSubscribe();
this.subscribeScrollTo();
if(this.identifier){
this.handleLWCConnectionSubscribe();
}
if(this.customOptionList){
this.parseOptionList();
} else {
this.getOptionList();
}
})
.catch(error => console.log(error));
}
if(this.requiredField == null || !this.requiredField){
this.requiredField = false;
}
if(this.customErrorMessage == null || !this.customErrorMessage){
this.customErrorMessage = ERROR_MESSAGE_DEFAULT;
}
}
renderedCallback(){
if(!this.identifier){
if(this.labelText){
var labelId = this.template.querySelector('.nhsuk-select-label').id;
this.template.querySelector('.nhsuk-fieldset').setAttribute('aria-labelledby', labelId);
}
if(this.hasTitle && !this.labelText){
var labelId = this.template.querySelector('.nhsuk-label--m').id;
this.template.querySelector('.nhsuk-fieldset').setAttribute('aria-labelledby', labelId);
}
}
if(this.hasHintLabel){
var hintId = this.template.querySelector('.nhsuk-select-hint-label').id;
var radiogroupElement = this.template.querySelector('.nhsuk-fieldset');
var getAriadescribedbyId = radiogroupElement.getAttribute('aria-describedby');
var ariadescribedbyId = getAriadescribedbyId == null ? hintId : getAriadescribedbyId.includes(hintId) ? getAriadescribedbyId : hintId + ' ' + getAriadescribedbyId;
this.template.querySelector('.nhsuk-fieldset').setAttribute('aria-describedby', ariadescribedbyId);
}
if(this.hasHint1 && !this.hasHintLabel){
var hintId = this.template.querySelector('.nhsuk-select-hint').id;
var radiogroupElement = this.template.querySelector('.nhsuk-fieldset');
var getAriadescribedbyId = radiogroupElement.getAttribute('aria-describedby');
var ariadescribedbyId = getAriadescribedbyId == null ? hintId : getAriadescribedbyId.includes(hintId) ? getAriadescribedbyId : hintId + ' ' + getAriadescribedbyId;
this.template.querySelector('.nhsuk-fieldset').setAttribute('aria-describedby', ariadescribedbyId);
}
if(this.selectedRadio) {
var inputElements = this.template.querySelectorAll('.nhsuk-select-radios__input');
for(let i = 0; i < this.radioOptions.length; i++) {
if(this.radioOptions[i].value === this.selectedRadio) {
if(inputElements[i].getAttribute('aria-expanded')){
inputElements[i].setAttribute('aria-expanded', "true");
if(inputElements[i].getAttribute('aria-controls')){
var id = inputElements[i].getAttribute('data-ref-id');
var element = this.template.querySelector(`[data-id="${id}"]`);
element.classList.contains('nhsuk-radios__conditional--hidden') ?
element.classList.remove('nhsuk-radios__conditional--hidden') : null;
}
}
}
}
}
}
disconnectedCallback(){
this.unsubscribe();
this.unsubscribeScrollTo();
this.handleLWCConnectionUnsubscribe();
}
handleSubscribe() {
if (this.isSubscribedToValidationRequestEvent) return;
registerListener(FLOW_VALIDATION_REQ_EVENT_NAME, this.handleValidationRequestHandler = (message) => {
if(message.requestValidation){
this.isComponentValid();
}
}, this);
this.isSubscribedToValidationRequestEvent = true;
}
unsubscribe(){
if (this.isSubscribedToValidationRequestEvent) {
unregisterListener(FLOW_VALIDATION_REQ_EVENT_NAME, this.handleValidationRequestHandler, this);
this.isSubscribedToValidationRequestEvent = false;
}
}
subscribeScrollTo() {
if (this.isSubscribedToScrollToEvent) return;
registerListener(SCROLL_TO_EVENT_NAME, this.scrollToHandler = (message) => {
if(message.targetId) {
scrollToElement(this, message.targetId);
}
}, this);
this.isSubscribedToScrollToEvent = true;
}
unsubscribeScrollTo() {
if (this.isSubscribedToScrollToEvent) {
unregisterListener(SCROLL_TO_EVENT_NAME, this.scrollToHandler, this);
this.isSubscribedToScrollToEvent = false;
}
}
handleLWCConnectionSubscribe() {
if (this.isSubscribedToConnectionRequestEvent) return;
registerListener(DISPLAYELEMENT_INPUTELEMENT_CONNECTION, this.handleConnectionRequest = (message) => {
if(message.identifier && message.identifier.includes(this.identifier)){
this.template.querySelector('.nhsuk-fieldset').setAttribute('aria-labelledby', message.identifier);
}
}, this);
this.isSubscribedToConnectionRequestEvent = true;
}
handleLWCConnectionUnsubscribe(){
if (this.isSubscribedToConnectionRequestEvent) {
unregisterListener(DISPLAYELEMENT_INPUTELEMENT_CONNECTION, this.handleConnectionRequest, this);
this.isSubscribedToConnectionRequestEvent = false;
}
}
setDefaultValue(){
// set the default value
if(this.selectedRadio) {
var inputElements = this.template.querySelectorAll('.nhsuk-select-radios__input');
for(let i = 0; i < this.radioOptions.length; i++) {
if(this.radioOptions[i].value === this.selectedRadio) {
this.selectedValue = this.radioOptions[i].value;
this.radioOptions[i].checked = true;
this.enteredTextLabel = this.radioOptions[i].inputLabel;
if(this.enteredValue){
this.enteredText = getSanitizedData(this.enteredValue);
if(this.radioOptions[i].type === 'phone'){
let result = this.enteredValue.replace(/[- )(]/g,'');
if(result.match(PHONE_REGEX)) {
this.errorShowPhone = false;
this.enteredText = result;
}
else{
this.errorShowPhone = true;
}
}
if(this.radioOptions[i].type === 'internationalPhone'){
let result = this.enteredValue.replace(/[- )(]/g,'');
if(PhoneFormat.isValidNumber(result) && INDENTIFY_LETTERS.test(result)) {
this.errorShowInternationalPhone = false;
this.enteredText = result;
}
else{
this.errorShowInternationalPhone = true;
}
}
else if(this.radioOptions[i].type === 'email'){
if(this.enteredValue.match(EMAIL_REGEX)) {
this.errorShowEmail = false;
}
else{
this.errorShowEmail = true;
}
}
else if(this.radioOptions[i].type === 'number'){
this.invalidNumber = undefined;
this.isValidNumber(this.enteredValue);
if(!this.invalidNumber) {
this.errorShowNumber = false;
}
else{
this.errorShowNumber = true;
}
}
else if(this.radioOptions[i].type === 'postcode'){
if(this.enteredValue.match(POST_CODE_REGEX)) {
this.errorShowEmail = false;
}
else{
this.errorShowEmail = true;
}
}
}
break;
}
}
}
}
updateValue(event){
this.errorShowPhone = false;
this.errorShowInternationalPhone = false;
this.errorShowEmail = false;
this.errorShowNumber = false;
this.pageErrors = [];
this.inputCssError = false;
const updatedValue = event.target.value;
var inputElements = this.template.querySelectorAll('.nhsuk-select-radios__input');
inputElements.forEach(inputElement =>{
if(inputElement.getAttribute('aria-expanded')){
inputElement.setAttribute('aria-expanded', "false");
}
});
var divElements = this.template.querySelectorAll('.nhsuk-select-radios__conditional');
divElements.forEach(divElement =>{
!divElement.classList.contains('nhsuk-radios__conditional--hidden') ?
divElement.classList.add('nhsuk-radios__conditional--hidden') : null;
});
this.radioOptions.forEach(option => {
option.checked = option.value === updatedValue;
if(option.value === updatedValue) {
this.selectedValue = updatedValue;
this.selectedOptionType = option.type
const attributeChangeEvent = FlowAttributeChangeEvent('selectedRadio', updatedValue);
this.dispatchEvent(attributeChangeEvent);
this.enteredTextLabel = option.inputLabel;
if(event.target.getAttribute('aria-expanded')){
event.target.setAttribute('aria-expanded', "true");
}
if(event.target.getAttribute('aria-controls')){
var id = event.target.getAttribute('data-ref-id');
var element = this.template.querySelector(`[data-id="${id}"]`);
element.classList.contains('nhsuk-radios__conditional--hidden') ?
element.classList.remove('nhsuk-radios__conditional--hidden') : null;
}
}
})
this.enteredText = null;
const attributeChangeEventUpdate = FlowAttributeChangeEvent('enteredValue', this.enteredText);
this.dispatchEvent(attributeChangeEventUpdate);
}
// Related to child component, this will make child components errors visible on radio buttons
dateInputError(event){
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: event.detail})
}
dateValueChanged(event){
this.enteredText = event.detail;
const attributeChangeEventText = FlowAttributeChangeEvent('enteredValue', this.enteredText);
this.dispatchEvent(attributeChangeEventText);
}
// get the entered text and send it to the flow
textChange(event){
let textVal = getSanitizedData(event.target.value);
for(let i = 0; i < this.radioOptions.length; i++) {
if(this.radioOptions[i].label === event.target.name){
this.enteredText = textVal;
if(this.radioOptions[i].inputLabel){
this.enteredTextLabel = this.radioOptions[i].inputLabel;
}
if(this.radioOptions[i].type === 'phone'){
let result = textVal.replace(/[- )(]/g,'');
if(result.match(PHONE_REGEX)) {
this.errorShowPhone = false;
this.enteredText = result;
}
else{
this.errorShowPhone = true;
}
}
if(this.radioOptions[i].type === 'internationalPhone'){
let result = textVal.replace(/[- )(]/g,'');
if(PhoneFormat.isValidNumber(result) && INDENTIFY_LETTERS.test(result)) {
this.errorShowInternationalPhone = false;
this.enteredText = result;
}
else{
this.errorShowInternationalPhone = true;
}
}
else if(this.radioOptions[i].type === 'email'){
if(textVal.match(EMAIL_REGEX)) {
this.errorShowEmail = false;
this.enteredText = textVal;
}
else{
this.errorShowEmail = true;
}
}
else if(this.radioOptions[i].type === 'number'){
this.invalidNumber = undefined;
this.isValidNumber(textVal);
if(!this.invalidNumber) {
this.errorShowNumber = false;
this.enteredText = textVal;
}
else{
this.errorShowNumber = true;
}
}
else if(this.radioOptions[i].type === 'postcode'){
if(textVal.match(POST_CODE_REGEX)) {
this.errorShowPostCode = false;
this.enteredText = textVal;
}
else{
this.errorShowPostCode = true;
}
}
}
}
const attributeChangeEventText = FlowAttributeChangeEvent('enteredValue', this.enteredText);
this.dispatchEvent(attributeChangeEventText);
}
parseOptionList(){
this.radioOptions = [];
let hintList = [];
const optionList = this.customOptionList.split(BULLET_LIST_DELIMITER);
let optionTypeList = [];
let optionInputLabelList = [];
if(this.customOptionTypeList != null && this.customOptionTypeList != ''
&& this.customOptionTypeList != 'undefined'){
optionTypeList = this.customOptionTypeList.split(BULLET_LIST_DELIMITER);
}
if(this.customOptionInputLabelList != null && this.customOptionInputLabelList != ''
&& this.customOptionInputLabelList != 'undefined'){
optionInputLabelList = this.customOptionInputLabelList.split(BULLET_LIST_DELIMITER);
}
if(this.customHintsList !== undefined && this.customHintsList !== '' && this.customHintsList !== null){
hintList = this.customHintsList.split(BULLET_LIST_DELIMITER);
}
for(let i = 0; i < optionList.length; i++){
let optionValue = {};
var optionValueId = `option-value-${optionList[i]}`;
optionValue.key = optionValueId.replace(/\s+/g, '-').replaceAll(' ','-').replaceAll('&','').replaceAll(')','').replaceAll('(','').replaceAll(',','');
//optionValue.key = `option-value-${optionList[i].replace(/\s+/g, '-')}`;
optionValue.radioInputName = `radio-input-${this.titleText}`;
optionValue.value = optionList[i];
optionValue.label = optionList[i];
optionValue.checked = false;
// This is used to render child component for date input
optionValue.isNHSDate = false;
if(hintList.length > 0){
optionValue.hint = hintList[i];
optionValue.hintId = hintList[i].replace(/\s+/g, '-');
}
if(optionTypeList.length > 0){
optionValue.type = optionTypeList[i];
optionValue.isNHSDate = optionTypeList[i] === 'nhsdate';
}
if(optionInputLabelList.length > 0 && optionInputLabelList[i]){
optionValue.inputLabel = optionInputLabelList[i];
optionValue.inputLabelId = optionInputLabelList[i].replace(/\s+/g, '-');
optionValue.conditionalDivId = optionInputLabelList[i].replace(/\s+/g, '-') + '-' + i;
}
this.radioOptions.push(optionValue);
}
this.setDefaultValue();
}
get getGridClass() {
return getGridSize();
}
get hasTitle() {
return (this.titleText !== undefined && this.titleText !== '' && this.titleText !== null);
}
get hasHint1() {
return (this.hint1Text !== undefined && this.hint1Text !== '' && this.hint1Text !== null);
}
get hasHint2() {
return (this.hint2Text !== undefined && this.hint2Text !== '' && this.hint2Text !== null);
}
get hasHints() {
return (this.useHints || (this.customHintsList !== undefined && this.customHintsList !== '' && this.customHintsList !== null));
}
get radiosClass() {
return RADIO_CSS_STANDARD;
}
//dynamic width of the input field
get inputWidthClass() {
let inputCss;
if(this.inputWidth){
inputCss = INPUT_WIDTH_CSS_STANDARD + this.inputWidth;
}
else{
inputCss = INPUT_CSS_STANDARD;
}
if(this.inputCssError){
inputCss = inputCss + ' ' + INPUT_CSS_STANDARD_INVALID;
}
else{
inputCss = inputCss + ' ' + INPUT_CSS_STANDARD;
}
return inputCss;
}
get formGroupErrorClass() {
if(this.radiosGenericErrorDetail) {
return FORM_GROUP_CSS_STANDARD_ERROR;
}
return FORM_GROUP_CSS_STANDARD;
}
get radiosClassErrorDetail() {
if(this.pageErrors && this.pageErrors.length > 0) {
for (let i = 0; i < this.pageErrors.length; i++) {
const pageError = this.pageErrors[i];
if (pageError.target === PAGE_ERROR_RADIO_TYPE) {
return pageError.detail;
}
}
}
return undefined;
}
isComponentValid(){
this.pageErrors = [];
this.radiosGenericErrorDetail = undefined;
const payload = {
source: 'Component',
isValid: true,
errorMessage: null
};
// Main validation for date is done on child component
if(this.selectedOptionType === 'nhsdate') return;
if(!this.selectedValue && this.requiredField){
var element = this.template.querySelector('.nhsuk-radios');
var inputElement = this.template.querySelector('.nhsuk-radios__input');
console.log('radio Id = ' + inputElement.id);
payload.isValid = false;
//payload.errorMessage = {key: 1, target: element.id, detail: this.customErrorMessage};
payload.errorMessage = {key: 1, target: inputElement.id, detail: this.customErrorMessage};
this.pageErrors = [];
this.radiosGenericErrorDetail = this.customErrorMessage;
}
if((this.enteredText === null || this.enteredText === '') && this.enteredTextLabel){
this.inputCssError = true;
var prefix = this.selectedOptionType === 'postcode' ? 'Enter a ' : 'Enter your ';
var dynamicErrorMessage = prefix + this.enteredTextLabel.toLowerCase();
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: 1, target: element.id, detail: dynamicErrorMessage};
this.pageErrors = [];
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: dynamicErrorMessage})
}
if(this.enteredText!=null){
if(this.enteredText.length > 11 && this.customOptionInputLabelList.includes('barcode')){
this.inputCssError = true;
var dynamicErrorMessage = 'Enter a valid ' + this.enteredTextLabel.toLowerCase();
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: 'Your test barcode number must not be more than 11 characters'};
this.pageErrors = [];
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: 'Your test barcode number must not be more than 11 characters'});
}
if(this.enteredText.length > 12 && this.enteredTextLabel.includes('Booking')){
this.inputCssError = true;
var dynamicErrorMessage = 'Enter a valid ' + this.enteredTextLabel.toLowerCase();
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: ERROR_MESSAGE_CHARACTER_LIMIT};
this.pageErrors = [];
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: ERROR_MESSAGE_CHARACTER_LIMIT});
}
}
if(this.enteredText!=null){
if(this.enteredText.includes('@') || this.enteredText.includes('£') || this.enteredText.includes('!') || this.enteredText.includes('*') || this.enteredText.includes('$') || this.enteredText.includes('%') || this.enteredText.includes('&') || this.enteredText.includes('(') || this.enteredText.includes(')') || this.enteredText.includes('-') || this.enteredText.includes('/') || this.enteredText.includes(';') || this.enteredText.includes(':') && (this.customOptionInputLabelList.includes('Booking') || this.customOptionInputLabelList.includes('barcode'))){
this.inputCssError = true;
var dynamicErrorMessage = 'Enter a valid ' + this.enteredTextLabel.toLowerCase();
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: ERROR_MESSAGE_PROHIBITED};
this.pageErrors = [];
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: ERROR_MESSAGE_PROHIBITED})
}
}
if(this.errorShowPhone && this.enteredTextLabel){
this.inputCssError = true;
var dynamicErrorMessage = 'Enter ' + (this.enteredTextLabel.match(VOWEL_REGEX) ? 'an ': 'a ') + this.enteredTextLabel.toLowerCase() + INVALID_PHONE;
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: dynamicErrorMessage};
this.pageErrors = [];
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: dynamicErrorMessage})
}
if(this.errorShowInternationalPhone && this.enteredTextLabel){
this.inputCssError = true;
var dynamicErrorMessage = 'Enter a valid ' + this.enteredTextLabel.toLowerCase();
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: dynamicErrorMessage};
this.pageErrors = [];
this.pageErrors.push({key: 1, target: PAGE_ERROR_RADIO_TYPE, detail: dynamicErrorMessage})
}
if(this.errorShowEmail && this.enteredTextLabel){
this.inputCssError = true;
var dynamicErrorMessage = 'Enter ' + (this.enteredTextLabel.match(VOWEL_REGEX) ? 'an ': 'a ') + this.enteredTextLabel.toLowerCase() + INVALID_EMAIL;
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: dynamicErrorMessage};
this.pageErrors = [];
this.pageErrors.push({key: 2, target: PAGE_ERROR_RADIO_TYPE, detail: dynamicErrorMessage})
}
if(this.errorShowNumber && this.enteredTextLabel){
this.inputCssError = true;
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: this.invalidNumber};
this.pageErrors = [];
this.pageErrors.push({key: 2, target: PAGE_ERROR_RADIO_TYPE, detail: this.invalidNumber})
}
if(this.errorShowPostCode && this.enteredTextLabel){
this.inputCssError = true;
var element = this.template.querySelector('.nhsuk-input');
payload.isValid = false;
payload.errorMessage = {key: element.id, target: element.id, detail: INVALID_POSTCODE};
this.pageErrors = [];
this.pageErrors.push({key: 2, target: PAGE_ERROR_RADIO_TYPE, detail: INVALID_POSTCODE})
}
else {
this.inputCssError = false;
this.selectedRadio = this.selectedValue;
if(this.enteredText){
this.enteredValue = this.enteredText;
}
if(this.requiredInSummary){
FlowContextProvider.addSummaryItem({
sortOrder : this.sortOrderNumber,
label : this.labelForSummary,
value : this.selectedRadio,
dependentLabel : this.dependentLabelForSummary,
dependentValue : this.dependentValueForSummary
});
}
}
fireEvent(this.pageRef, FLOW_VALIDATION_RESP_EVENT_NAME, payload);
}
isValidNumber(enteredNumber){
if(!this.fieldNameErrorLabel){
this.fieldNameErrorLabel = 'value';
}
if(!enteredNumber.match(NUMBER_REGEX)) {
this.invalidNumber = this.numberExampleForError
? this.fieldNameErrorLabel + ' must be a number, like ' + this.numberExampleForError
: this.fieldNameErrorLabel + ' must be a number';
} else {
if((this.minChar > enteredNumber.length || enteredNumber.length > this.maxChar) &&
(this.minChar && this.maxChar)){
if(this.minChar == this.maxChar){
this.invalidNumber = this.fieldNameErrorLabel + ' must be ' + this.minChar + ' digits';
} else {
this.invalidNumber = this.fieldNameErrorLabel + ' must be between ' + this.minChar + ' and ' + this.maxChar + ' digits';
}
} else if(this.minChar > enteredNumber.length){
this.invalidNumber = this.fieldNameErrorLabel + ' must be ' + this.minChar + ' digits or more';
} else if(enteredNumber.length > this.maxChar && this.maxChar){
this.invalidNumber = this.fieldNameErrorLabel + ' must be ' + this.maxChar + ' digits or fewer';
} else {
this.invalidNumber = false;
}
}
}
}Editor is loading...