@everymatrix/player-profile-info 0.0.214 → 0.0.218

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everymatrix/player-profile-info",
3
- "version": "0.0.214",
3
+ "version": "0.0.218",
4
4
  "main": "dist/player-profile-info.js",
5
5
  "svelte": "src/index.ts",
6
6
  "scripts": {
@@ -36,5 +36,5 @@
36
36
  "publishConfig": {
37
37
  "access": "public"
38
38
  },
39
- "gitHead": "504c889b442d1a70906bdb23ddaef68e256963b6"
39
+ "gitHead": "ae78406d20c106f1d3c352c0e97189a7bdffacfb"
40
40
  }
@@ -1,22 +1,27 @@
1
1
  <svelte:options tag={null} />
2
2
 
3
- <script lang="typescript">
3
+ <script lang="ts">
4
4
  import { onMount } from 'svelte';
5
5
  import { getDevice } from 'rvhelper';
6
6
  import { _, addNewMessages, setLocale } from './i18n';
7
7
  import { PlayerProfileTranslations } from './translations';
8
8
 
9
+ // Native bridge
10
+ import { isNative, call as callNative, registerEventListener as registerNativeEventListener } from 'js-native-bridge';
11
+
12
+
9
13
  export let endpoint:string = '';
10
14
  export let lang:string = 'en';
11
15
 
12
16
  let isLoading:boolean = false;
13
- let userAgent:String = window.navigator.userAgent;
14
- let isMobile = (getDevice(userAgent) === 'PC') ? false : true;
17
+ let userAgent:string = window.navigator.userAgent;
18
+ let isMobile:boolean = (getDevice(userAgent) === 'PC') ? false : true;
15
19
  let noPlayerData:boolean = true;
16
20
 
17
21
  let playerPostalCode:HTMLElement, playerAddress:HTMLElement, playerCity:HTMLElement;
18
22
  let giveConsentSMS:boolean = false;
19
23
  let giveConsentEmail:boolean = false;
24
+ let biometricsSelection:boolean = false;
20
25
  let playerQuestion:string = '';
21
26
  let playerAnswer:string = '';
22
27
  let playerPrefix:string = '';
@@ -26,15 +31,24 @@
26
31
  let prefixesArray:Array<Object> = [];
27
32
  let countriesArray:Array<Object> = []
28
33
 
34
+ let isValid:boolean = false;
35
+
29
36
  let invalidCity:string = '';
30
37
  let invalidPostalCode:string = '';
31
38
  let invalidAddress:string = '';
39
+ let invalidSecurityQuestion:boolean = false;
40
+ let invalidSecurityAnswer:boolean = false;
41
+ let invalidMobile:boolean;
32
42
 
33
43
  let showConfirmSave:boolean = false;
34
44
 
45
+ // Native bridge
46
+ let isOnNative:boolean = false;
47
+
35
48
  Object.keys(PlayerProfileTranslations).forEach((item:any) => {
36
49
  addNewMessages(item, PlayerProfileTranslations[item]);
37
50
  });
51
+
38
52
  const mediaQuery = window.matchMedia('(min-width: 768px)');
39
53
 
40
54
  // needed to keep track of data changes
@@ -49,6 +63,7 @@
49
63
  securityAnswer: '',
50
64
  securityQuestion: '',
51
65
  }
66
+
52
67
  // needed to keep track of data changes
53
68
  let initialValuesArray:any = {
54
69
  acceptNewsEmail: false,
@@ -61,6 +76,7 @@
61
76
  securityAnswer: '',
62
77
  securityQuestion: ''
63
78
  }
79
+
64
80
  // placeholder field values
65
81
  let profileDetails:any = {
66
82
  address1: "i.e.: Glanmire Rd.",
@@ -83,7 +99,7 @@
83
99
 
84
100
  let {address1, birth, city, country, currency, mobile, email, firstname, userTitles, language, lastname, postalCode, securityAnswer, securityQuestion, username, consents} = profileDetails;
85
101
 
86
- const messageHandler = (e:any) => {
102
+ const messageHandler = (e:any):void => {
87
103
  if (e.data) {
88
104
  switch(e.data.type) {
89
105
  case 'ProfileDetailsData':
@@ -124,22 +140,37 @@
124
140
  securityAnswer: profileDetails.securityAnswer,
125
141
  securityQuestion: profileDetails.securityQuestion,
126
142
  }
127
-
128
143
  break;
129
144
 
130
145
  case 'ConfirmProfileInfoSave':
146
+ if (isOnNative) {
147
+ registerNativeEventListener(
148
+ 'BIOMETRICS_ENABLED',
149
+ (biometricsEnabled) => {
150
+ if (biometricsEnabled !== biometricsSelection) {
151
+ biometricsSelection = biometricsEnabled;
152
+ }
153
+ },
154
+ );
155
+
156
+ const methodFound = callNative(
157
+ biometricsSelection ? 'ENABLE_BIOMETRICS' : 'DISABLE_BIOMETRICS',
158
+ );
159
+
160
+ if (!methodFound) {
161
+ // Nothing to do here yet
162
+ }
163
+ }
164
+
131
165
  differencesExist = false;
132
- showConfirmMessage();
133
- break;
134
166
 
135
- default:
136
- // do nothing
137
- break;
167
+ showConfirmMessage();
168
+ break;
138
169
  }
139
170
  }
140
171
  }
141
172
 
142
- const getCountriesList = () => {
173
+ const getCountriesList = ():void => {
143
174
  fetch(`${endpoint}/player/countries`)
144
175
  .then((res:any) => res.json())
145
176
  .then(data => {
@@ -147,7 +178,7 @@
147
178
  });
148
179
  }
149
180
 
150
- const getPhoneCodes = () => {
181
+ const getPhoneCodes = ():void => {
151
182
  fetch(`${endpoint}/player/phonecodes`)
152
183
  .then((res:any) => res.json())
153
184
  .then(data => {
@@ -155,15 +186,14 @@
155
186
  });
156
187
  }
157
188
 
158
- const showConfirmMessage = () => {
189
+ const showConfirmMessage = ():void => {
159
190
  showConfirmSave = true;
160
191
  setTimeout(() => {showConfirmSave = false;}, 3000);
161
192
  }
162
193
 
163
- let isValid:Boolean = false;
164
194
 
165
- const checkIsValid = () => {
166
- if (playerQuestion.length <= 0 || playerAnswer.length <= 0 || invalidCity || invalidAddress || invalidPostalCode || playerMobileNumber.length <= 0) {
195
+ const checkIsValid = ():void => {
196
+ if (invalidSecurityQuestion || invalidSecurityAnswer || invalidCity || invalidAddress || invalidPostalCode || invalidMobile) {
167
197
  isValid = false;
168
198
  }
169
199
  else {
@@ -171,33 +201,72 @@
171
201
  }
172
202
  }
173
203
 
174
- const checkCity = () => {
175
- if(playerCity.value && playerCity.value.length <= 50) {
204
+ const checkMobile = ():boolean => {
205
+ if(playerMobileNumber && playerMobileNumber.length >= 5 && playerMobileNumber.length <= 30) {
206
+ return true;
207
+ }
208
+
209
+ return false;
210
+ }
211
+
212
+ const validateMobile = ():void => {
213
+ invalidMobile = !checkMobile();
214
+ checkIsValid();
215
+ }
216
+
217
+ const checkSecurityQuestion = ():boolean => {
218
+ if (playerQuestion && playerQuestion.length <= 120) {
219
+ return true;
220
+ }
221
+
222
+ return false;
223
+ }
224
+
225
+ const validateSecurityQuestion = ():void => {
226
+ invalidSecurityQuestion = !checkSecurityQuestion();
227
+ checkIsValid();
228
+ }
229
+
230
+ const checkSecurityAnswer = ():boolean => {
231
+ if (playerAnswer && playerAnswer.length <= 120) {
232
+ return true;
233
+ }
234
+
235
+ return false;
236
+ }
237
+
238
+ const validateSecurityAnswer = ():void => {
239
+ invalidSecurityAnswer = !checkSecurityAnswer();
240
+ checkIsValid();
241
+ }
242
+
243
+ const checkCity = ():boolean => {
244
+ if (playerCity.value && playerCity.value.length <= 50) {
176
245
  return true;
177
246
  }
178
247
 
179
248
  return false;
180
249
  }
181
250
 
182
- const validateCity = () => {
251
+ const validateCity = ():void => {
183
252
  invalidCity = !checkCity();
184
253
  checkIsValid();
185
254
  }
186
255
 
187
- const checkPostalCode = () => {
188
- if(playerPostalCode.value && playerPostalCode.value.length <= 20) {
256
+ const checkPostalCode = ():boolean => {
257
+ if (playerPostalCode.value && playerPostalCode.value.length <= 20) {
189
258
  return true;
190
259
  }
191
260
 
192
261
  return false;
193
262
  }
194
263
 
195
- const validatePostalCode = () => {
264
+ const validatePostalCode = ():void => {
196
265
  invalidPostalCode = !checkPostalCode();
197
266
  checkIsValid();
198
267
  }
199
268
 
200
- const checkAddress = () => {
269
+ const checkAddress = ():boolean => {
201
270
  if(playerAddress.value && playerAddress.value.length <= 100) {
202
271
  return true;
203
272
  }
@@ -205,23 +274,22 @@
205
274
  return false;
206
275
  }
207
276
 
208
- const validateAddress = () => {
277
+ const validateAddress = ():void => {
209
278
  invalidAddress = !checkAddress();
210
279
  checkIsValid();
211
280
  }
212
281
 
213
- const updatePlayerInfo = () => {
282
+ const updatePlayerInfo = ():void => {
214
283
  if (differencesExist == true && isValid == true) {
215
284
  window.postMessage({ type: 'UpdatePlayerInfo', provisionalArray }, window.location.href);
216
285
  }
217
286
  }
218
287
 
219
- const toggleScreen = () => {
288
+ const toggleScreen = ():void => {
220
289
  window.postMessage({ type: 'ReturnToMenu' }, window.location.href);
221
290
  }
222
291
 
223
- const checkForChanges = () => {
224
-
292
+ const checkForChanges = ():void => {
225
293
  provisionalArray = {
226
294
  acceptNewsEmail: giveConsentEmail,
227
295
  acceptSMSOffers: giveConsentSMS,
@@ -238,9 +306,7 @@
238
306
  checkIsValid();
239
307
  }
240
308
 
241
- const resetPlayerInfo = () => {
242
- // provisionalArray = initialValuesArray;
243
-
309
+ const resetPlayerInfo = ():void => {
244
310
  playerAddress.value = initialValuesArray.address;
245
311
  playerCity.value = initialValuesArray.city;
246
312
  giveConsentEmail = initialValuesArray.acceptNewsEmail;
@@ -254,7 +320,7 @@
254
320
  toggleScreen();
255
321
  }
256
322
 
257
- const checkEquality = (a, b) => {
323
+ const checkEquality = (a, b):void => {
258
324
  if(JSON.stringify(a) === JSON.stringify(b)) {
259
325
  differencesExist = false;
260
326
  } else {
@@ -262,18 +328,32 @@
262
328
  }
263
329
  }
264
330
 
265
- const initialLoad = () => {
331
+ const setActiveLanguage = ():void => {
266
332
  setLocale(lang);
267
333
  }
268
334
 
269
335
  onMount(() => {
270
336
  window.addEventListener('message', messageHandler, false);
337
+
338
+ isOnNative = !!isNative(userAgent);
339
+
340
+ if (isOnNative) {
341
+ registerNativeEventListener(
342
+ 'BIOMETRICS_ENABLED',
343
+ (biometricsEnabled) => {
344
+ biometricsSelection = !!biometricsEnabled
345
+ },
346
+ );
347
+
348
+ callNative('BIOMETRICS_ENABLED');
349
+ }
350
+
271
351
  return () => {
272
352
  window.removeEventListener('message', messageHandler);
273
353
  }
274
354
  });
275
355
 
276
- $: lang && initialLoad();
356
+ $: lang && setActiveLanguage();
277
357
  $: endpoint && getCountriesList();
278
358
  $: endpoint && getPhoneCodes();
279
359
  </script>
@@ -304,7 +384,7 @@
304
384
  <label>{$_('playerProfile.userName')}</label>
305
385
  <input type="text" class="FieldDisabled" value={username} readonly />
306
386
  </div>
307
- <div class="PlayerInfoBox">
387
+ <div class="PlayerInfoBox {invalidMobile ? 'InvalidField' : ''}">
308
388
  <label>{$_('playerProfile.userPhone')}</label>
309
389
  <div class="PlayerPhoneNumber">
310
390
  <select bind:value={playerPrefix} on:change={() => checkForChanges()}>
@@ -316,41 +396,50 @@
316
396
  {/if}
317
397
  {/each}
318
398
  </select>
319
- <input bind:value={playerMobileNumber} type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" placeholder={noPlayerData ? mobile.number : ''} on:keyup={() => checkForChanges()}/>
399
+ <input bind:value={playerMobileNumber} on:keyup={validateMobile} type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" placeholder={noPlayerData ? mobile.number : ''} on:keyup={() => checkForChanges()}/>
320
400
  </div>
401
+ {#if invalidMobile}
402
+ <p class="InvalidInput">{$_('playerProfile.userPhoneError')}</p>
403
+ {/if}
404
+ </div>
405
+ <div class="PlayerInfoBox {invalidSecurityQuestion ? 'InvalidField' : ''}">
406
+ <label>{$_('playerProfile.securityQuestion')}</label>
407
+ <input type="text" bind:value={playerQuestion} on:keyup={() => checkForChanges()} on:blur={validateSecurityQuestion} placeholder={noPlayerData ? securityQuestion : ''} />
408
+ {#if invalidSecurityQuestion}
409
+ <p class="InvalidInput">{$_('playerProfile.securityQuestionError')}</p>
410
+ {/if}
411
+ </div>
412
+ <div class="PlayerInfoBox {invalidSecurityAnswer ? 'InvalidField' : ''}">
413
+ <label>{$_('playerProfile.securityAnswer')}</label>
414
+ <input type="text" bind:value={playerAnswer} on:keyup={() => checkForChanges()} on:blur={validateSecurityAnswer} placeholder={noPlayerData ? securityAnswer : ''} />
415
+ {#if invalidSecurityAnswer}
416
+ <p class="InvalidInput">{$_('playerProfile.securityAnswerError')}</p>
417
+ {/if}
321
418
  </div>
322
419
  <div class="PlayerInfoBox">
323
420
  <label>{$_('playerProfile.userEmail')}</label>
324
421
  <input type="email" class="FieldDisabled" value={email} readonly />
325
422
  </div>
326
423
  <div class="PlayerInfoBox">
327
- <label>{$_('playerProfile.securityQuestion')}</label>
328
- <input type="text" bind:value={playerQuestion} on:keyup={() => checkForChanges()} placeholder={noPlayerData ? securityQuestion : ''} />
424
+ <label>{$_('playerProfile.dateOfBirth')}</label>
425
+ <input type="text" class="FieldDisabled" value={birth} readonly />
329
426
  </div>
330
427
  <div class="PlayerInfoBox">
331
428
  <label>{$_('playerProfile.firstName')}</label>
332
429
  <input type="text" class="FieldDisabled" value={firstname} readonly />
333
430
  </div>
334
- <div class="PlayerInfoBox">
335
- <label>{$_('playerProfile.securityAnswer')}</label>
336
- <input type="text" bind:value={playerAnswer} on:keyup={() => checkForChanges()} placeholder={noPlayerData ? securityAnswer : ''} />
337
- </div>
338
431
  <div class="PlayerInfoBox">
339
432
  <label>{$_('playerProfile.lastName')}</label>
340
433
  <input type="text" class="FieldDisabled" value={lastname} readonly />
341
434
  </div>
342
435
  <div class="PlayerInfoBox">
343
- <label>{$_('playerProfile.dateOfBirth')}</label>
344
- <input type="text" class="FieldDisabled" value={birth} readonly />
436
+ <label>{$_('playerProfile.userTitle')}</label>
437
+ <input type="text" class="FieldDisabled" value={userTitles} readonly />
345
438
  </div>
346
439
  <div class="PlayerInfoBox">
347
440
  <label>{$_('playerProfile.currency')}</label>
348
441
  <input type="text" class="FieldDisabled" value={currency} readonly />
349
442
  </div>
350
- <div class="PlayerInfoBox">
351
- <label>{$_('playerProfile.userTitle')}</label>
352
- <input type="text" class="FieldDisabled" value={userTitles} readonly />
353
- </div>
354
443
  </section>
355
444
 
356
445
  <div class="PlayerLocationHeader">
@@ -365,21 +454,21 @@
365
454
  <label>{$_('playerProfile.userCity')}</label>
366
455
  <input bind:this={playerCity} type="text" on:blur={validateCity} on:keyup={() => checkForChanges()} placeholder={noPlayerData ? city : ''} value={noPlayerData ? '' : initialValuesArray.city} />
367
456
  {#if invalidCity}
368
- <p class="InvalidInput">City must be at least 1 character long and 50 characters maximum.</p>
457
+ <p class="InvalidInput">{$_('playerProfile.userCityError')}</p>
369
458
  {/if}
370
459
  </div>
371
460
  <div class="PlayerInfoBox {invalidAddress ? 'InvalidField' : ''}">
372
461
  <label>{$_('playerProfile.userAddress')}</label>
373
462
  <input bind:this={playerAddress} placeholder={address1} type="text" on:blur={validateAddress} on:keyup={() => checkForChanges()} value={noPlayerData ? '' : initialValuesArray.address} />
374
463
  {#if invalidAddress}
375
- <p class="InvalidInput">Address must be at least 1 character long and 100 characters maximum.</p>
464
+ <p class="InvalidInput">{$_('playerProfile.userAddressError')}</p>
376
465
  {/if}
377
466
  </div>
378
467
  <div class="PlayerInfoBox {invalidPostalCode ? 'InvalidField' : ''}">
379
468
  <label>{$_('playerProfile.userPostalCode')}</label>
380
469
  <input bind:this={playerPostalCode} type="number" on:blur={validatePostalCode} on:keyup={() => checkForChanges()} placeholder={noPlayerData ? postalCode : ''} value={noPlayerData ? '' : initialValuesArray.postalCode} />
381
470
  {#if invalidPostalCode}
382
- <p class="InvalidInput">Postal Code must be at least 1 character long and 20 characters maximum.</p>
471
+ <p class="InvalidInput">{$_('playerProfile.userPostalCodeError')}</p>
383
472
  {/if}
384
473
  </div>
385
474
  </section>
@@ -403,6 +492,20 @@
403
492
  </label>
404
493
  </div>
405
494
  </section>
495
+ {#if isOnNative}
496
+ <div class="PlayerNotificationsHeader">
497
+ <h3>{$_('playerProfile.userAppSettings')}</h3>
498
+ </div>
499
+ <section class="PlayerNotificationsCheckboxArea">
500
+ <div class="PlayerNotificationBox">
501
+ <label for="Biometrics">
502
+ <input bind:checked={biometricsSelection} on:change={checkForChanges} type="checkbox" id="BiometricsEnabled" name="Biometric Enabled" />
503
+ <span class="Checkmark"></span>
504
+ <span>{$_('playerProfile.userBiometrics')}</span>
505
+ </label>
506
+ </div>
507
+ </section>
508
+ {/if}
406
509
  <section class="PlayerDetailsButtonsArea {isMobile ? 'PlayerDetailsButtonsAreaMobile' : ''}">
407
510
  <div class="PlayerDetailsSaveButton {differencesExist && isValid ? '' : 'PlayerButtonDisabled'}" on:click={() => updatePlayerInfo()}>{$_('playerProfile.userProfileSaveChanges')}</div>
408
511
  </section>
@@ -5,10 +5,13 @@ export const PlayerProfileTranslations = {
5
5
  personalDetails: `Personal Details`,
6
6
  userName: `User name:`,
7
7
  userPhone: `Phone:`,
8
+ userPhoneError: 'Mobile must be at least 5 character long and 20 characters maximum.',
8
9
  userEmail: `Email:`,
9
10
  securityQuestion: `Security Question:`,
11
+ securityQuestionError: 'Security question must be at least 1 character long and maximum 120 characters.',
10
12
  firstName: `First name:`,
11
13
  securityAnswer: `Security Answer:`,
14
+ securityAnswerError: 'Security answer must be at least 1 character long and maximum 120 characters.',
12
15
  lastName: `Last Name:`,
13
16
  dateOfBirth: `Date of birth:`,
14
17
  currency: `Currency:`,
@@ -16,10 +19,15 @@ export const PlayerProfileTranslations = {
16
19
  locationDetails: `Location Details`,
17
20
  userCountry: `Country:`,
18
21
  userCity: `City:`,
22
+ userCityError: 'City must be at least 1 character long and 50 characters maximum.',
19
23
  userAddress: `Address:`,
24
+ userAddressError: 'Address must be at least 1 character long and 100 characters maximum.',
20
25
  userPostalCode: `Postal Code:`,
26
+ userPostalCodeError: 'Postal Code must be at least 1 character long and 20 characters maximum.',
21
27
  userNotifications: `Notifications`,
28
+ userAppSettings: `Biometrics`,
22
29
  userSMSNotification: `Enable SMS notifications`,
30
+ userBiometrics: `Enable biometrics`,
23
31
  userEmailNotification: `Enable Emails`,
24
32
  userProfileSaveChanges: `Save Changes`,
25
33
  userProfileConfirmationMessage: `Your changes have been saved!`
@@ -31,24 +39,62 @@ export const PlayerProfileTranslations = {
31
39
  personalDetails: `Detalii Personale`,
32
40
  userName: `Nume utilizator:`,
33
41
  userPhone: `Telefon:`,
42
+ userPhoneError: 'Telefon-ul trebuie să aibă cel puțin 5 caractere și maximum 20 de caractere.',
34
43
  userEmail: `E-mail:`,
35
44
  securityQuestion: `Întrebare securitate:`,
45
+ securityQuestionError: 'Întrebarea de securitate trebuie să aibă cel puțin 1 caracter și maximum 120 de caractere.',
36
46
  firstName: `Prenume:`,
37
47
  securityAnswer: `Răspuns securitate:`,
48
+ securityAnswerError: 'Security answer must be at least 1 character long and maximum 120 characters.',
38
49
  lastName: `Nume:`,
39
50
  dateOfBirth: `Data nașterii:`,
40
51
  currency: `Monedă:`,
41
52
  userTitle: `Titlu:`,
42
53
  locationDetails: `Detalii de Localizare`,
43
54
  userCountry: `Țară:`,
55
+ userCityError: 'Orașul trebuie să aibă cel puțin 1 caracter și maximum 50 de caractere.',
44
56
  userCity: `Oraș:`,
45
57
  userAddress: `Adresă:`,
58
+ userAddressError: 'Address must be at least 1 character long and 100 characters maximum.',
46
59
  userPostalCode: `Cod poștal:`,
60
+ userPostalCodeError: 'Codul poștal trebuie să aibă cel puțin 1 caracter și maximum 20 de caractere.',
47
61
  userNotifications: `Notificări`,
48
62
  userSMSNotification: `Activează notificări prin SMS`,
49
63
  userEmailNotification: `Activează notificări prin E-mail`,
50
64
  userProfileSaveChanges: `Salvează`,
51
65
  userProfileConfirmationMessage: `Modificările au fost salvate!`
52
66
  }
67
+ },
68
+ tr: {
69
+ playerProfile: {
70
+ title: `Profil bilgisi`,
71
+ personalDetails: `Kişisel detaylar`,
72
+ userName: `Kullanıcı adı:`,
73
+ userPhone: `Telefon:`,
74
+ userPhoneError: 'Mobil en az 5 karakter uzunluğunda ve en fazla 20 karakter olmalıdır.',
75
+ userEmail: `E-posta:`,
76
+ securityQuestion: `Güvenlik Sorusu:`,
77
+ securityQuestionError: 'Güvenlik sorusu en az 1, en fazla 120 karakter uzunluğunda olmalıdır.',
78
+ firstName: `First name:`,
79
+ securityAnswer: `İlk adı:`,
80
+ securityAnswerError: 'Güvenlik cevabı en az 1 karakter uzunluğunda ve en fazla 120 karakter olmalıdır.',
81
+ lastName: `Soyadı:`,
82
+ dateOfBirth: `Doğum tarihi:`,
83
+ currency: `Para birimi:`,
84
+ userTitle: `Başlık:`,
85
+ locationDetails: `Konum Ayrıntıları`,
86
+ userCountry: `Ülke:`,
87
+ userCity: `Şehir:`,
88
+ userCityError: 'Şehir en az 1 karakter uzunluğunda ve en fazla 50 karakter olmalıdır.',
89
+ userAddress: `Adres:`,
90
+ userAddressError: 'Adres en az 1 karakter uzunluğunda ve en fazla 100 karakter olmalıdır.',
91
+ userPostalCode: `Posta kodu:`,
92
+ userPostalCodeError: 'Posta Kodu en az 1 karakter uzunluğunda ve en fazla 20 karakter olmalıdır.',
93
+ userNotifications: `Bildirimler`,
94
+ userSMSNotification: `SMS bildirimlerini etkinleştir`,
95
+ userEmailNotification: `E-postaları Etkinleştir`,
96
+ userProfileSaveChanges: `Değişiklikleri Kaydet`,
97
+ userProfileConfirmationMessage: `Değişiklikleriniz kaydedildi!`
98
+ }
53
99
  }
54
100
  };