| 41 | } |
| 42 | |
| 43 | export class Field extends BaseInputComponent{ |
| 44 | constructor(args){ |
| 45 | super({ type: 'field' }); |
| 46 | |
| 47 | let selectors = { |
| 48 | input: '[id^="checkout_"]', |
| 49 | errorMessage: '.field__message--error', |
| 50 | wrapper: '.field__input-wrapper', |
| 51 | }; |
| 52 | |
| 53 | let classes = { |
| 54 | wrapper: ['field__input-wrapper'], |
| 55 | field: ['field', 'field--show-floating-label'], |
| 56 | fieldInput: ['field__input'], |
| 57 | label: ['field__label', 'field__label--visible'], |
| 58 | fieldError: ['field--error'], |
| 59 | fieldErrorMessage: ['field__message', 'field__message--error'], |
| 60 | half: ['field--half'], |
| 61 | }; |
| 62 | |
| 63 | if(typeof args == 'string'){ |
| 64 | let input = document.querySelector(`#${args}`); |
| 65 | let element = new FieldRetriever().retrieve(input); |
| 66 | Object.setPrototypeOf(element, Field.prototype); |
| 67 | |
| 68 | let field = Object.assign(element, { |
| 69 | componentType: this.componentType, |
| 70 | fieldName: element.name, |
| 71 | fieldId: element.id, |
| 72 | selectors, |
| 73 | classes, |
| 74 | }); |
| 75 | |
| 76 | return field; |
| 77 | }else if (typeof args == 'object'){ |
| 78 | const { name, label = name, isHalf } = args; |
| 79 | |
| 80 | let fieldId = `checkout_attributes_${name}`; |
| 81 | let fieldName = `checkout[attributes][${name}]`; |
| 82 | |
| 83 | let element = this; |
| 84 | element.classList.add(...classes.field); |
| 85 | if(isHalf) element.classList.add(classes.half); |
| 86 | |
| 87 | let wrapperElement = document.createElement('div'); |
| 88 | wrapperElement.classList.add(classes.wrapper); |
| 89 | |
| 90 | let labelElement = document.createElement('label'); |
| 91 | labelElement.classList.add(...classes.label); |
| 92 | labelElement.innerText = label; |
| 93 | labelElement.htmlFor = fieldId; |
| 94 | |
| 95 | wrapperElement.appendChild(labelElement); |
| 96 | element.appendChild(wrapperElement); |
| 97 | |
| 98 | Object.setPrototypeOf(element, Field.prototype); |
| 99 | let field = Object.assign(element, { |
| 100 | fieldName: fieldName, |
nothing calls this directly
no outgoing calls
no test coverage detected