fleetcor-lwc 3.0.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +141 -4
- package/frontend/components/flt/button/button.scss +2 -1
- package/frontend/components/flt/inputEmail/__test__/inputEmail.test.js +39 -0
- package/frontend/components/flt/inputEmail/inputEmail.js +8 -0
- package/frontend/components/flt/inputPhone/__test__/radioItem.test.js +56 -0
- package/frontend/components/flt/inputPhone/arrow.svg +3 -0
- package/frontend/components/flt/inputPhone/close-button.svg +3 -0
- package/frontend/components/flt/inputPhone/flags/AD@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/AL@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/AT@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/BA@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/BE@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/BG@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/BY@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/CH@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/CZ@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/DE@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/DK@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/EE@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/ES@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/FI@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/FO@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/FR@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/GB@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/GI@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/GR@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/HR@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/HU@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/IE@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/IS@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/IT@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/LI@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/LT@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/LU@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/LV@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/MC@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/MD@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/ME@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/MK@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/MT@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/NL@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/NO@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/PL@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/PT@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/RO@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/RS@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/RU@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/SE@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/SI@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/SK@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/SM@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/UA@2x.png +0 -0
- package/frontend/components/flt/inputPhone/flags/VA@2x.png +0 -0
- package/frontend/components/flt/inputPhone/inputPhone.html +109 -0
- package/frontend/components/flt/inputPhone/inputPhone.js +252 -0
- package/frontend/components/flt/inputPhone/inputPhone.scss +288 -0
- package/frontend/components/flt/inputPhone/utils.js +325 -0
- package/frontend/components/flt/inputText/__test__/inputText.test.js +211 -0
- package/frontend/components/flt/inputText/inputText.html +24 -0
- package/frontend/components/flt/inputText/inputText.js +99 -0
- package/frontend/components/flt/inputText/inputText.scss +124 -0
- package/frontend/components/flt/modal/__test__/modal.test.js +30 -0
- package/frontend/components/flt/modal/modal.html +6 -0
- package/frontend/components/flt/modal/modal.js +8 -0
- package/frontend/components/flt/modal/modal.scss +34 -0
- package/frontend/components/flt/progressStep/__test__/progressStep.test.js +17 -1
- package/frontend/components/flt/progressStep/progressStep.scss +6 -6
- package/frontend/core/index.js +2 -0
- package/frontend/core/interface/InputElement.js +87 -0
- package/frontend/core/interface/ModalViewer.js +26 -0
- package/frontend/core/interface/UserDataManager.js +11 -1
- package/package.json +12 -7
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import AL from './flags/AL@2x.png'
|
|
2
|
+
import AD from './flags/AD@2x.png'
|
|
3
|
+
import AT from './flags/AT@2x.png'
|
|
4
|
+
import BY from './flags/BY@2x.png'
|
|
5
|
+
import BE from './flags/BE@2x.png'
|
|
6
|
+
import BA from './flags/BA@2x.png'
|
|
7
|
+
import BG from './flags/BG@2x.png'
|
|
8
|
+
import HR from './flags/HR@2x.png'
|
|
9
|
+
import CZ from './flags/CZ@2x.png'
|
|
10
|
+
import DK from './flags/DK@2x.png'
|
|
11
|
+
import EE from './flags/EE@2x.png'
|
|
12
|
+
import FO from './flags/FO@2x.png'
|
|
13
|
+
import FI from './flags/FI@2x.png'
|
|
14
|
+
import FR from './flags/FR@2x.png'
|
|
15
|
+
import DE from './flags/DE@2x.png'
|
|
16
|
+
import GI from './flags/GI@2x.png'
|
|
17
|
+
import GR from './flags/GR@2x.png'
|
|
18
|
+
import VA from './flags/VA@2x.png'
|
|
19
|
+
import HU from './flags/HU@2x.png'
|
|
20
|
+
import IS from './flags/IS@2x.png'
|
|
21
|
+
import IE from './flags/IE@2x.png'
|
|
22
|
+
import IT from './flags/IT@2x.png'
|
|
23
|
+
import LV from './flags/LV@2x.png'
|
|
24
|
+
import LI from './flags/LI@2x.png'
|
|
25
|
+
import LT from './flags/LT@2x.png'
|
|
26
|
+
import LU from './flags/LU@2x.png'
|
|
27
|
+
import MK from './flags/MK@2x.png'
|
|
28
|
+
import MT from './flags/MT@2x.png'
|
|
29
|
+
import MD from './flags/MD@2x.png'
|
|
30
|
+
import MC from './flags/MC@2x.png'
|
|
31
|
+
import ME from './flags/ME@2x.png'
|
|
32
|
+
import NL from './flags/NL@2x.png'
|
|
33
|
+
import NO from './flags/NO@2x.png'
|
|
34
|
+
import PL from './flags/PL@2x.png'
|
|
35
|
+
import PT from './flags/PT@2x.png'
|
|
36
|
+
import RO from './flags/RO@2x.png'
|
|
37
|
+
import RU from './flags/RU@2x.png'
|
|
38
|
+
import SM from './flags/SM@2x.png'
|
|
39
|
+
import RS from './flags/RS@2x.png'
|
|
40
|
+
import SK from './flags/SK@2x.png'
|
|
41
|
+
import SI from './flags/SI@2x.png'
|
|
42
|
+
import ES from './flags/ES@2x.png'
|
|
43
|
+
import SE from './flags/SE@2x.png'
|
|
44
|
+
import CH from './flags/CH@2x.png'
|
|
45
|
+
import UA from './flags/UA@2x.png'
|
|
46
|
+
import GB from './flags/GB@2x.png'
|
|
47
|
+
|
|
48
|
+
export const COUNTRIES = [
|
|
49
|
+
{
|
|
50
|
+
name: 'Albania',
|
|
51
|
+
dialCode: '+355',
|
|
52
|
+
code: 'AL',
|
|
53
|
+
flag: AL
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'Andorra',
|
|
57
|
+
dialCode: '+376',
|
|
58
|
+
code: 'AD',
|
|
59
|
+
flag: AD
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'Austria',
|
|
63
|
+
dialCode: '+43',
|
|
64
|
+
code: 'AT',
|
|
65
|
+
flag: AT
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'Belarus',
|
|
69
|
+
dialCode: '+375',
|
|
70
|
+
code: 'BY',
|
|
71
|
+
flag: BY
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'Belgium',
|
|
75
|
+
dialCode: '+32',
|
|
76
|
+
code: 'BE',
|
|
77
|
+
flag: BE
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'Bosnia and Herzegovina',
|
|
81
|
+
dialCode: '+387',
|
|
82
|
+
code: 'BA',
|
|
83
|
+
flag: BA
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'Bulgaria',
|
|
87
|
+
dialCode: '+359',
|
|
88
|
+
code: 'BG',
|
|
89
|
+
flag: BG
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'Croatia',
|
|
93
|
+
dialCode: '+385',
|
|
94
|
+
code: 'HR',
|
|
95
|
+
flag: HR
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Czech Republic',
|
|
99
|
+
dialCode: '+420',
|
|
100
|
+
code: 'CZ',
|
|
101
|
+
flag: CZ
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'Denmark',
|
|
105
|
+
dialCode: '+45',
|
|
106
|
+
code: 'DK',
|
|
107
|
+
flag: DK
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'Estonia',
|
|
111
|
+
dialCode: '+372',
|
|
112
|
+
code: 'EE',
|
|
113
|
+
flag: EE
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'Faroe Islands',
|
|
117
|
+
dialCode: '+298',
|
|
118
|
+
code: 'FO',
|
|
119
|
+
flag: FO
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'Finland',
|
|
123
|
+
dialCode: '+358',
|
|
124
|
+
code: 'FI',
|
|
125
|
+
flag: FI
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'France',
|
|
129
|
+
dialCode: '+33',
|
|
130
|
+
code: 'FR',
|
|
131
|
+
flag: FR
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'Germany',
|
|
135
|
+
dialCode: '+49',
|
|
136
|
+
code: 'DE',
|
|
137
|
+
flag: DE
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'Gibraltar',
|
|
141
|
+
dialCode: '+350',
|
|
142
|
+
code: 'GI',
|
|
143
|
+
flag: GI
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'Greece',
|
|
147
|
+
dialCode: '+30',
|
|
148
|
+
code: 'GR',
|
|
149
|
+
flag: GR
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'Holy See (Vatican City State)',
|
|
153
|
+
dialCode: '+39',
|
|
154
|
+
code: 'VA',
|
|
155
|
+
flag: VA
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'Hungary',
|
|
159
|
+
dialCode: '+36',
|
|
160
|
+
code: 'HU',
|
|
161
|
+
flag: HU
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: 'Iceland',
|
|
165
|
+
dialCode: '+354',
|
|
166
|
+
code: 'IS',
|
|
167
|
+
flag: IS
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'Ireland',
|
|
171
|
+
dialCode: '+353',
|
|
172
|
+
code: 'IE',
|
|
173
|
+
flag: IE
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'Italy',
|
|
177
|
+
dialCode: '+39',
|
|
178
|
+
code: 'IT',
|
|
179
|
+
flag: IT
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'Latvia',
|
|
183
|
+
dialCode: '+371',
|
|
184
|
+
code: 'LV',
|
|
185
|
+
flag: LV
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: 'Liechtenstein',
|
|
189
|
+
dialCode: '+423',
|
|
190
|
+
code: 'LI',
|
|
191
|
+
flag: LI
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: 'Lithuania',
|
|
195
|
+
dialCode: '+370',
|
|
196
|
+
code: 'LT',
|
|
197
|
+
flag: LT
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
name: 'Luxembourg',
|
|
201
|
+
dialCode: '+352',
|
|
202
|
+
code: 'LU',
|
|
203
|
+
flag: LU
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: 'Macedonia',
|
|
207
|
+
dialCode: '+389',
|
|
208
|
+
code: 'MK',
|
|
209
|
+
flag: MK
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'Malta',
|
|
213
|
+
dialCode: '+356',
|
|
214
|
+
code: 'MT',
|
|
215
|
+
flag: MT
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: 'Moldova',
|
|
219
|
+
dialCode: '+373',
|
|
220
|
+
code: 'MD',
|
|
221
|
+
flag: MD
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'Monaco',
|
|
225
|
+
dialCode: '+377',
|
|
226
|
+
code: 'MC',
|
|
227
|
+
flag: MC
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'Montenegro',
|
|
231
|
+
dialCode: '+382',
|
|
232
|
+
code: 'ME',
|
|
233
|
+
flag: ME
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: 'Netherlands',
|
|
237
|
+
dialCode: '+31',
|
|
238
|
+
code: 'NL',
|
|
239
|
+
flag: NL
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: 'Norway',
|
|
243
|
+
dialCode: '+47',
|
|
244
|
+
code: 'NO',
|
|
245
|
+
flag: NO
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'Poland',
|
|
249
|
+
dialCode: '+48',
|
|
250
|
+
code: 'PL',
|
|
251
|
+
flag: PL
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: 'Portugal',
|
|
255
|
+
dialCode: '+351',
|
|
256
|
+
code: 'PT',
|
|
257
|
+
flag: PT
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
name: 'Romania',
|
|
261
|
+
dialCode: '+40',
|
|
262
|
+
code: 'RO',
|
|
263
|
+
flag: RO
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'Russia',
|
|
267
|
+
dialCode: '+7',
|
|
268
|
+
code: 'RU',
|
|
269
|
+
flag: RU
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: 'San Marino',
|
|
273
|
+
dialCode: '+378',
|
|
274
|
+
code: 'SM',
|
|
275
|
+
flag: SM
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: 'Serbia',
|
|
279
|
+
dialCode: '+381',
|
|
280
|
+
code: 'RS',
|
|
281
|
+
flag: RS
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: 'Slovakia',
|
|
285
|
+
dialCode: '+421',
|
|
286
|
+
code: 'SK',
|
|
287
|
+
flag: SK
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: 'Slovenia',
|
|
291
|
+
dialCode: '+386',
|
|
292
|
+
code: 'SI',
|
|
293
|
+
flag: SI
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
name: 'Spain',
|
|
297
|
+
dialCode: '+34',
|
|
298
|
+
code: 'ES',
|
|
299
|
+
flag: ES
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: 'Sweden',
|
|
303
|
+
dialCode: '+46',
|
|
304
|
+
code: 'SE',
|
|
305
|
+
flag: SE
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: 'Switzerland',
|
|
309
|
+
dialCode: '+41',
|
|
310
|
+
code: 'CH',
|
|
311
|
+
flag: CH
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: 'Ukraine',
|
|
315
|
+
dialCode: '+380',
|
|
316
|
+
code: 'UA',
|
|
317
|
+
flag: UA
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
name: 'United Kingdom',
|
|
321
|
+
dialCode: '+44',
|
|
322
|
+
code: 'GB',
|
|
323
|
+
flag: GB
|
|
324
|
+
}
|
|
325
|
+
]
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { createElement } from 'lwc'
|
|
2
|
+
import InputText from 'flt/inputText'
|
|
3
|
+
|
|
4
|
+
describe('flt-input-text', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
while (document.body.firstChild) {
|
|
7
|
+
document.body.removeChild(document.body.firstChild)
|
|
8
|
+
}
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('flt-input-text base', async () => {
|
|
12
|
+
const inputTextElement = createElement('flt-input-text', { is: InputText })
|
|
13
|
+
inputTextElement.name = 'description'
|
|
14
|
+
inputTextElement.label = 'Description'
|
|
15
|
+
inputTextElement.placeholder = 'Description'
|
|
16
|
+
document.body.appendChild(inputTextElement)
|
|
17
|
+
|
|
18
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
|
|
19
|
+
inputTextElement.validate()
|
|
20
|
+
return Promise.resolve().then(async () => {
|
|
21
|
+
await expect(inputTextElement.firstChild.classList).not.toContain(
|
|
22
|
+
'flt-input-text_success'
|
|
23
|
+
)
|
|
24
|
+
await expect(inputTextElement.isValid()).toBeTruthy()
|
|
25
|
+
let data = inputTextElement.getData()
|
|
26
|
+
await expect(data.placeholder).toBe('Description')
|
|
27
|
+
|
|
28
|
+
inputTextElement.value = 'Hello'
|
|
29
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
30
|
+
inputTextElement.validate()
|
|
31
|
+
|
|
32
|
+
return Promise.resolve().then(async () => {
|
|
33
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
34
|
+
'flt-input-text_success'
|
|
35
|
+
)
|
|
36
|
+
await expect(inputTextElement.isValid()).toBeTruthy()
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('flt-input-text required', async () => {
|
|
42
|
+
const inputTextElement = createElement('flt-input-text', { is: InputText })
|
|
43
|
+
inputTextElement.name = 'FirstName'
|
|
44
|
+
inputTextElement.label = 'First Name'
|
|
45
|
+
inputTextElement.placeholder = 'First Name'
|
|
46
|
+
inputTextElement.required = true
|
|
47
|
+
document.body.appendChild(inputTextElement)
|
|
48
|
+
|
|
49
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
|
|
50
|
+
inputTextElement.validate()
|
|
51
|
+
return Promise.resolve().then(async () => {
|
|
52
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_error')
|
|
53
|
+
await expect(inputTextElement.isValid()).toBeFalsy()
|
|
54
|
+
let data = inputTextElement.getData()
|
|
55
|
+
await expect(data.label).toBe('First Name')
|
|
56
|
+
|
|
57
|
+
inputTextElement.value = 'TestName'
|
|
58
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
59
|
+
inputTextElement.validate()
|
|
60
|
+
|
|
61
|
+
return Promise.resolve().then(async () => {
|
|
62
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
63
|
+
'flt-input-text_success'
|
|
64
|
+
)
|
|
65
|
+
await expect(inputTextElement.isValid()).toBeTruthy()
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('flt-input-text maxLength', async () => {
|
|
71
|
+
const inputTextElement = createElement('flt-input-text', { is: InputText })
|
|
72
|
+
inputTextElement.name = 'FirstName'
|
|
73
|
+
inputTextElement.label = 'First Name'
|
|
74
|
+
inputTextElement.placeholder = 'First Name'
|
|
75
|
+
inputTextElement.required = true
|
|
76
|
+
inputTextElement.maxLength = 10
|
|
77
|
+
document.body.appendChild(inputTextElement)
|
|
78
|
+
|
|
79
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
|
|
80
|
+
inputTextElement.validate()
|
|
81
|
+
return Promise.resolve().then(async () => {
|
|
82
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_error')
|
|
83
|
+
await expect(inputTextElement.isValid()).toBeFalsy()
|
|
84
|
+
let data = inputTextElement.getData()
|
|
85
|
+
await expect(data.label).toBe('First Name')
|
|
86
|
+
|
|
87
|
+
inputTextElement.value = 'TestNameToBig'
|
|
88
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
89
|
+
inputTextElement.validate()
|
|
90
|
+
|
|
91
|
+
return Promise.resolve().then(async () => {
|
|
92
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
93
|
+
'flt-input-text_error'
|
|
94
|
+
)
|
|
95
|
+
await expect(inputTextElement.isValid()).toBeFalsy()
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
it('flt-input-text minValue & maxValue', async () => {
|
|
101
|
+
const inputTextElement = createElement('flt-input-text', { is: InputText })
|
|
102
|
+
inputTextElement.name = 'FirstName'
|
|
103
|
+
inputTextElement.label = 'First Name'
|
|
104
|
+
inputTextElement.placeholder = 'First Name'
|
|
105
|
+
inputTextElement.required = true
|
|
106
|
+
inputTextElement.minValue = 10
|
|
107
|
+
inputTextElement.maxValue = 100
|
|
108
|
+
document.body.appendChild(inputTextElement)
|
|
109
|
+
|
|
110
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
|
|
111
|
+
inputTextElement.validate()
|
|
112
|
+
return Promise.resolve().then(async () => {
|
|
113
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_error')
|
|
114
|
+
await expect(inputTextElement.isValid()).toBeFalsy()
|
|
115
|
+
let data = inputTextElement.getData()
|
|
116
|
+
await expect(data.name).toBe('FirstName')
|
|
117
|
+
|
|
118
|
+
inputTextElement.value = 9
|
|
119
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
120
|
+
inputTextElement.validate()
|
|
121
|
+
return Promise.resolve().then(async () => {
|
|
122
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
123
|
+
'flt-input-text_error'
|
|
124
|
+
)
|
|
125
|
+
await expect(inputTextElement.isValid()).toBeFalsy()
|
|
126
|
+
|
|
127
|
+
inputTextElement.value = 1000
|
|
128
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
129
|
+
inputTextElement.validate()
|
|
130
|
+
return Promise.resolve().then(async () => {
|
|
131
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
132
|
+
'flt-input-text_error'
|
|
133
|
+
)
|
|
134
|
+
await expect(inputTextElement.isValid()).toBeFalsy()
|
|
135
|
+
inputTextElement.value = 50
|
|
136
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
137
|
+
inputTextElement.validate()
|
|
138
|
+
return Promise.resolve().then(async () => {
|
|
139
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
140
|
+
'flt-input-text_success'
|
|
141
|
+
)
|
|
142
|
+
await expect(inputTextElement.isValid()).toBeTruthy()
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
it('flt-input-text base disabled', async () => {
|
|
150
|
+
const inputTextElement = createElement('flt-input-text', { is: InputText })
|
|
151
|
+
inputTextElement.name = 'description'
|
|
152
|
+
inputTextElement.label = 'Description'
|
|
153
|
+
inputTextElement.placeholder = 'Description'
|
|
154
|
+
inputTextElement.disabled = true
|
|
155
|
+
document.body.appendChild(inputTextElement)
|
|
156
|
+
|
|
157
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_disabled')
|
|
158
|
+
inputTextElement.validate()
|
|
159
|
+
const input = inputTextElement.querySelector('input')
|
|
160
|
+
input.dispatchEvent(new Event('focus'))
|
|
161
|
+
input.dispatchEvent(new Event('blur'))
|
|
162
|
+
|
|
163
|
+
return Promise.resolve().then(async () => {
|
|
164
|
+
inputTextElement.value = 'Hello'
|
|
165
|
+
inputTextElement.dispatchEvent(new CustomEvent('change'))
|
|
166
|
+
return Promise.resolve().then(async () => {
|
|
167
|
+
const data = inputTextElement.getData()
|
|
168
|
+
await expect(data.value).toBeFalsy()
|
|
169
|
+
|
|
170
|
+
const labelElement = inputTextElement.querySelector('label')
|
|
171
|
+
labelElement.click()
|
|
172
|
+
|
|
173
|
+
const inputElement = inputTextElement.querySelector('input')
|
|
174
|
+
inputElement.value = 'Hello'
|
|
175
|
+
inputElement.dispatchEvent(new Event('input'))
|
|
176
|
+
inputElement.dispatchEvent(new Event('change'))
|
|
177
|
+
return Promise.resolve().then(async () => {
|
|
178
|
+
await expect(inputTextElement.value).toBeFalsy()
|
|
179
|
+
await expect(inputElement.value).toBeFalsy()
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
it('flt-input-text handle events', async () => {
|
|
186
|
+
const inputTextElement = createElement('flt-input-text', { is: InputText })
|
|
187
|
+
inputTextElement.name = 'description'
|
|
188
|
+
inputTextElement.label = 'Description'
|
|
189
|
+
inputTextElement.placeholder = 'Description'
|
|
190
|
+
document.body.appendChild(inputTextElement)
|
|
191
|
+
const input = inputTextElement.querySelector('input')
|
|
192
|
+
input.focus()
|
|
193
|
+
input.dispatchEvent(new Event('focus'))
|
|
194
|
+
return Promise.resolve().then(async () => {
|
|
195
|
+
await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_active')
|
|
196
|
+
input.value = 'Hello'
|
|
197
|
+
input.dispatchEvent(new Event('input'))
|
|
198
|
+
input.dispatchEvent(new Event('change'))
|
|
199
|
+
input.dispatchEvent(new Event('blur'))
|
|
200
|
+
|
|
201
|
+
return Promise.resolve().then(async () => {
|
|
202
|
+
await expect(inputTextElement.value).toBe('Hello')
|
|
203
|
+
await expect(inputTextElement.firstChild.classList).toContain(
|
|
204
|
+
'flt-input-text_success'
|
|
205
|
+
)
|
|
206
|
+
input.value = ''
|
|
207
|
+
input.dispatchEvent(new Event('blur'))
|
|
208
|
+
})
|
|
209
|
+
})
|
|
210
|
+
})
|
|
211
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template lwc:render-mode="light">
|
|
2
|
+
<div class={inputStyle}>
|
|
3
|
+
<label class="flt-input-text__wrapp" onclick={handleClickHandler} for={name}>
|
|
4
|
+
<div class="flt-input-text__placeholder">{placeholder}</div>
|
|
5
|
+
<div class="flt-input-text__input-block">
|
|
6
|
+
<span lwc:if={prefix} class="flt-input-text__prefix">{prefix}</span>
|
|
7
|
+
<input
|
|
8
|
+
id={name}
|
|
9
|
+
onfocus={handleFocused}
|
|
10
|
+
onblur={handleBlur}
|
|
11
|
+
class="flt-input-text__input"
|
|
12
|
+
maxlength={maxLength}
|
|
13
|
+
type={type}
|
|
14
|
+
disabled={disabled}
|
|
15
|
+
value={displayValue}
|
|
16
|
+
oninput={handleInput}
|
|
17
|
+
onchange={handleChange}
|
|
18
|
+
name={name}
|
|
19
|
+
placeholder={placeholder} />
|
|
20
|
+
</div>
|
|
21
|
+
</label>
|
|
22
|
+
<div class="flt-input-text__error">{errorMessage}</div>
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { api } from 'lwc'
|
|
2
|
+
import { InputElement } from 'fleetcor-lwc'
|
|
3
|
+
import './inputText.scss'
|
|
4
|
+
|
|
5
|
+
export default class InputText extends InputElement {
|
|
6
|
+
focused
|
|
7
|
+
touched
|
|
8
|
+
@api prefix
|
|
9
|
+
@api type = 'text'
|
|
10
|
+
@api placeholderVisible
|
|
11
|
+
@api errorMessage
|
|
12
|
+
|
|
13
|
+
get displayValue() {
|
|
14
|
+
return this.value || ''
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@api
|
|
18
|
+
validate() {
|
|
19
|
+
if (this.disabled) return
|
|
20
|
+
this.touched = true
|
|
21
|
+
this.error = !this.isValid()
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@api getData(silent) {
|
|
25
|
+
return {
|
|
26
|
+
...super.getData(silent),
|
|
27
|
+
type: this.type,
|
|
28
|
+
prefix: this.prefix
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
handleClickHandler(event) {
|
|
33
|
+
if (this.disabled) {
|
|
34
|
+
event.preventDefault()
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get inputStyle() {
|
|
39
|
+
return this.generateClassNameList({
|
|
40
|
+
'flt-input-text': true,
|
|
41
|
+
'flt-input-text_disabled': this.disabled,
|
|
42
|
+
'flt-input-text_active': this.value || this.focused || this.placeholderVisible,
|
|
43
|
+
'flt-input-text_error': this.touched && !this.isValid(),
|
|
44
|
+
'flt-input-text_success': this.value && this.isValid()
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
handleFocused(event) {
|
|
49
|
+
event.stopPropagation()
|
|
50
|
+
if (this.disabled) return
|
|
51
|
+
this.focused = true
|
|
52
|
+
this.dispatchEvent(
|
|
53
|
+
new CustomEvent('focus_happend', {
|
|
54
|
+
detail: null,
|
|
55
|
+
cancelable: true,
|
|
56
|
+
bubbles: true
|
|
57
|
+
})
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
handleBlur(event) {
|
|
62
|
+
event.stopPropagation()
|
|
63
|
+
if (this.disabled) return
|
|
64
|
+
this.focused = false
|
|
65
|
+
this.touched = true
|
|
66
|
+
this.value = (event.target.value || '').trimEnd()
|
|
67
|
+
event.target.value = this.value
|
|
68
|
+
this.dispatchEvent(
|
|
69
|
+
new CustomEvent('blur_happend', {
|
|
70
|
+
detail: null,
|
|
71
|
+
cancelable: true,
|
|
72
|
+
bubbles: true
|
|
73
|
+
})
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
handleInput(event) {
|
|
78
|
+
event.stopPropagation()
|
|
79
|
+
if (this.disabled) {
|
|
80
|
+
event.target.value = ''
|
|
81
|
+
event.preventDefault()
|
|
82
|
+
} else {
|
|
83
|
+
this.value = event.target.value
|
|
84
|
+
this.dispatchEvent(
|
|
85
|
+
new CustomEvent('change', {
|
|
86
|
+
detail: this.getData()
|
|
87
|
+
})
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
handleChange(event) {
|
|
93
|
+
if (this.disabled) {
|
|
94
|
+
event.target.value = ''
|
|
95
|
+
}
|
|
96
|
+
event.stopPropagation()
|
|
97
|
+
event.preventDefault()
|
|
98
|
+
}
|
|
99
|
+
}
|