MCPcopy Create free account
hub / github.com/adearriba/ShopifyCheckoutJS / Field

Class Field

src/Components/Field.js:43–181  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43export 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,

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected