Skip to content

Commit

Permalink
Refactor field creation to FieldFactory.js
Browse files Browse the repository at this point in the history
  • Loading branch information
adearriba committed Jan 25, 2021
1 parent e5692e7 commit 190aaa4
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 36 deletions.
41 changes: 5 additions & 36 deletions src/Checkout.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import NotValidFieldException from './Exceptions/NotValidFieldException.js';
import Field from './Fields/Field.js';
import TextField from './Fields/TextField.js';
import CheckboxField from './Fields/CheckboxField.js';
import DropdownField from './Fields/DropdownField.js';
import ShippingMethod from './ShippingMethod.js';
import PaymentMethod from './PaymentMethod.js';
import FieldFactory from './Fields/FieldFactory.js';

export default class Checkout {
constructor(){
Expand All @@ -31,39 +28,11 @@ export default class Checkout {
_getFields(){
let fields = [];

const fieldNodes = document.querySelectorAll('input, select');
const fieldNodes = document.querySelectorAll('input[id], select[id]');
const fieldFactory = new FieldFactory();
fieldNodes.forEach(el => {
if(typeof el.id !== 'string' || el.id.length == 0){
return;
}

switch (el.type) {
case 'text':
fields[el.id] = new TextField(el.id);
break;
case 'email':
fields[el.id] = new TextField(el.id);
break;
case 'tel':
fields[el.id] = new TextField(el.id);
break;
case 'checkbox':
fields[el.id] = new CheckboxField(el.id);
break;
case 'select-one':
fields[el.id] = new DropdownField(el.id);
break;
case 'hidden':
break;
default:
try{
fields[el.id] = new Field(el.id);
}catch(e){
if(e instanceof NotValidFieldException) return;
else throw e;
}
break;
}
let field = fieldFactory.createFieldByElement(el);
if (field != null) fields[el.id] = field;
});

return fields;
Expand Down
33 changes: 33 additions & 0 deletions src/Fields/FieldFactory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import Field from './Field.js';
import TextField from './TextField.js';
import CheckboxField from './CheckboxField.js';
import DropdownField from './DropdownField.js';
import NotValidFieldException from '../Exceptions/NotValidFieldException.js';

export default class FieldFactory {
constructor(){ }

createFieldByElement(element){
switch (element.type) {
case 'text':
return new TextField(element.id);
case 'email':
return new TextField(element.id);
case 'tel':
return new TextField(element.id);
case 'checkbox':
return new CheckboxField(element.id);
case 'select-one':
return new DropdownField(element.id);
case 'hidden':
return null;
default:
try{
return new Field(element.id);
}catch(e){
if(e instanceof NotValidFieldException) return null;
else throw e;
}
}
}
}

0 comments on commit 190aaa4

Please sign in to comment.