Skip to content

Commit 190aaa4

Browse files
committed
Refactor field creation to FieldFactory.js
1 parent e5692e7 commit 190aaa4

File tree

2 files changed

+38
-36
lines changed

2 files changed

+38
-36
lines changed

src/Checkout.js

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import NotValidFieldException from './Exceptions/NotValidFieldException.js';
2-
import Field from './Fields/Field.js';
3-
import TextField from './Fields/TextField.js';
4-
import CheckboxField from './Fields/CheckboxField.js';
5-
import DropdownField from './Fields/DropdownField.js';
62
import ShippingMethod from './ShippingMethod.js';
73
import PaymentMethod from './PaymentMethod.js';
4+
import FieldFactory from './Fields/FieldFactory.js';
85

96
export default class Checkout {
107
constructor(){
@@ -31,39 +28,11 @@ export default class Checkout {
3128
_getFields(){
3229
let fields = [];
3330

34-
const fieldNodes = document.querySelectorAll('input, select');
31+
const fieldNodes = document.querySelectorAll('input[id], select[id]');
32+
const fieldFactory = new FieldFactory();
3533
fieldNodes.forEach(el => {
36-
if(typeof el.id !== 'string' || el.id.length == 0){
37-
return;
38-
}
39-
40-
switch (el.type) {
41-
case 'text':
42-
fields[el.id] = new TextField(el.id);
43-
break;
44-
case 'email':
45-
fields[el.id] = new TextField(el.id);
46-
break;
47-
case 'tel':
48-
fields[el.id] = new TextField(el.id);
49-
break;
50-
case 'checkbox':
51-
fields[el.id] = new CheckboxField(el.id);
52-
break;
53-
case 'select-one':
54-
fields[el.id] = new DropdownField(el.id);
55-
break;
56-
case 'hidden':
57-
break;
58-
default:
59-
try{
60-
fields[el.id] = new Field(el.id);
61-
}catch(e){
62-
if(e instanceof NotValidFieldException) return;
63-
else throw e;
64-
}
65-
break;
66-
}
34+
let field = fieldFactory.createFieldByElement(el);
35+
if (field != null) fields[el.id] = field;
6736
});
6837

6938
return fields;

src/Fields/FieldFactory.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Field from './Field.js';
2+
import TextField from './TextField.js';
3+
import CheckboxField from './CheckboxField.js';
4+
import DropdownField from './DropdownField.js';
5+
import NotValidFieldException from '../Exceptions/NotValidFieldException.js';
6+
7+
export default class FieldFactory {
8+
constructor(){ }
9+
10+
createFieldByElement(element){
11+
switch (element.type) {
12+
case 'text':
13+
return new TextField(element.id);
14+
case 'email':
15+
return new TextField(element.id);
16+
case 'tel':
17+
return new TextField(element.id);
18+
case 'checkbox':
19+
return new CheckboxField(element.id);
20+
case 'select-one':
21+
return new DropdownField(element.id);
22+
case 'hidden':
23+
return null;
24+
default:
25+
try{
26+
return new Field(element.id);
27+
}catch(e){
28+
if(e instanceof NotValidFieldException) return null;
29+
else throw e;
30+
}
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)