Skip to content

Commit 13a1d90

Browse files
authored
fix: validate Point Field to -180 to 180 for longitude and -90 to 90 for latitude (#14206)
Fixes #14185
1 parent d7ec48f commit 13a1d90

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+140
-0
lines changed

packages/payload/src/fields/validations.spec.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,46 @@ describe('Field Validations', () => {
231231
const result = point(val, pointOptions)
232232
expect(result).not.toBe(true)
233233
})
234+
it('should validate longitude within bounds', () => {
235+
const val: PointFieldValue = ['180', '0']
236+
const result = point(val, pointOptions)
237+
expect(result).toBe(true)
238+
})
239+
it('should validate longitude at lower bound', () => {
240+
const val: PointFieldValue = ['-180', '0']
241+
const result = point(val, pointOptions)
242+
expect(result).toBe(true)
243+
})
244+
it('should prevent longitude below lower bound', () => {
245+
const val: PointFieldValue = ['-181', '0']
246+
const result = point(val, pointOptions)
247+
expect(result).toBe('validation:longitudeOutOfBounds')
248+
})
249+
it('should prevent longitude above upper bound', () => {
250+
const val: PointFieldValue = ['181', '0']
251+
const result = point(val, pointOptions)
252+
expect(result).toBe('validation:longitudeOutOfBounds')
253+
})
254+
it('should validate latitude within bounds', () => {
255+
const val: PointFieldValue = ['0', '90']
256+
const result = point(val, pointOptions)
257+
expect(result).toBe(true)
258+
})
259+
it('should validate latitude at lower bound', () => {
260+
const val: PointFieldValue = ['0', '-90']
261+
const result = point(val, pointOptions)
262+
expect(result).toBe(true)
263+
})
264+
it('should prevent latitude below lower bound', () => {
265+
const val: PointFieldValue = ['0', '-91']
266+
const result = point(val, pointOptions)
267+
expect(result).toBe('validation:latitudeOutOfBounds')
268+
})
269+
it('should prevent latitude above upper bound', () => {
270+
const val: PointFieldValue = ['0', '91']
271+
const result = point(val, pointOptions)
272+
expect(result).toBe('validation:latitudeOutOfBounds')
273+
})
234274
})
235275

236276
describe('relationship', () => {

packages/payload/src/fields/validations.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,16 @@ export const point: PointFieldValidation = (value = ['', ''], { req: { t }, requ
10491049
return t('validation:invalidInput')
10501050
}
10511051

1052+
// Validate longitude bounds (-180 to 180)
1053+
if (value[0] && !Number.isNaN(lng) && (lng < -180 || lng > 180)) {
1054+
return t('validation:longitudeOutOfBounds')
1055+
}
1056+
1057+
// Validate latitude bounds (-90 to 90)
1058+
if (value[1] && !Number.isNaN(lat) && (lat < -90 || lat > 90)) {
1059+
return t('validation:latitudeOutOfBounds')
1060+
}
1061+
10521062
return true
10531063
}
10541064

packages/translations/src/clientKeys.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,10 @@ export const clientTranslationKeys = createClientTranslationKeys([
430430
'validation:invalidInput',
431431
'validation:invalidSelection',
432432
'validation:invalidSelections',
433+
'validation:latitudeOutOfBounds',
433434
'validation:lessThanMin',
434435
'validation:limitReached',
436+
'validation:longitudeOutOfBounds',
435437
'validation:invalidBlock',
436438
'validation:invalidBlocks',
437439
'validation:longerThanMin',

packages/translations/src/languages/ar.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,9 +505,11 @@ export const arTranslations: DefaultTranslationsObject = {
505505
invalidInput: 'هذا الحقل لديه إدخال غير صالح.',
506506
invalidSelection: 'هذا الحقل لديه اختيار غير صالح.',
507507
invalidSelections: 'هذا الحقل لديه الاختيارات الغير صالحة التالية:',
508+
latitudeOutOfBounds: 'يجب أن تكون العرض بين -90 و 90.',
508509
lessThanMin: '{{value}} أقل من الحد الأدنى المسموح به {{label}} الذي يبلغ {{min}}.',
509510
limitReached: 'تم الوصول إلى الحد الأقصى، يمكن إضافة {{max}} عناصر فقط.',
510511
longerThanMin: 'يجب أن يكون هذا القيمة أطول من الحد الأدنى للطول الذي هو {{minLength}} أحرف.',
512+
longitudeOutOfBounds: 'يجب أن تكون الخطوط الطولية بين -180 و 180.',
511513
notValidDate: '"{{value}}" ليس تاريخا صالحا.',
512514
required: 'هذا الحقل مطلوب.',
513515
requiresAtLeast: 'هذا الحقل يتطلب على الأقل {{count}} {{label}}.',

packages/translations/src/languages/az.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,9 +521,11 @@ export const azTranslations: DefaultTranslationsObject = {
521521
invalidInput: 'Bu sahə yanlış daxil edilmişdir.',
522522
invalidSelection: 'Bu sahədə yanlış seçim edilmişdir.',
523523
invalidSelections: 'Bu sahədə aşağıdakı yanlış seçimlər edilmişdir:',
524+
latitudeOutOfBounds: 'Enlem -90 ilə 90 arasında olmalıdır.',
524525
lessThanMin: '{{value}} icazə verilən minimal {{label}} olan {{min}}-dən kiçikdir.',
525526
limitReached: 'Limitə çatdınız, yalnız {{max}} element əlavə edilə bilər.',
526527
longerThanMin: 'Bu dəyər {{minLength}} simvoldan uzun olmalıdır.',
528+
longitudeOutOfBounds: 'Boylam -180 ilə 180 arasında olmalıdır.',
527529
notValidDate: '"{{value}}" doğru tarix deyil.',
528530
required: 'Bu sahə mütləq doldurulmalıdır.',
529531
requiresAtLeast: 'Bu sahə ən azı {{count}} {{label}} tələb edir.',

packages/translations/src/languages/bg.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,10 +516,12 @@ export const bgTranslations: DefaultTranslationsObject = {
516516
invalidInput: 'Това поле има невалиден вход.',
517517
invalidSelection: 'Това поле има невалидна селекция.',
518518
invalidSelections: 'Това поле има следните невалидни селекции:',
519+
latitudeOutOfBounds: 'Ширината трябва да е между -90 и 90.',
519520
lessThanMin: '{{value}} е по-малко от минимално допустимото {{label}} от {{min}}.',
520521
limitReached: 'Достигнат е лимитът, могат да бъдат добавени само {{max}} елемента.',
521522
longerThanMin:
522523
'Тази стойност трябва да е по-голяма от минималната стойност от {{minLength}} символа.',
524+
longitudeOutOfBounds: 'Дължината трябва да бъде между -180 и 180.',
523525
notValidDate: '"{{value}}" не е валидна дата.',
524526
required: 'Това поле е задължително.',
525527
requiresAtLeast: 'Това поле изисква поне {{count}} {{label}}.',

packages/translations/src/languages/bnBd.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,9 +523,11 @@ export const bnBdTranslations: DefaultTranslationsObject = {
523523
invalidInput: 'এই ক্ষেত্রে একটি অবৈধ ইনপুট রয়েছে।',
524524
invalidSelection: 'এই ক্ষেত্রে একটি অবৈধ নির্বাচন রয়েছে।',
525525
invalidSelections: 'এই ক্ষেত্রে নিম্নলিখিত অবৈধ নির্বাচনগুলি রয়েছে:',
526+
latitudeOutOfBounds: 'অক্ষাংশ -90 এবং 90 এর মধ্যে হতে হবে।',
526527
lessThanMin: '{{value}} সর্বনিম্ন অনুমোদিত {{label}} {{min}} এর চেয়ে ছোট।',
527528
limitReached: 'সীমা reached, সর্বাধিক {{max}} আইটেম যোগ করা যাবে।',
528529
longerThanMin: 'এই মানটি সর্বনিম্ন {{minLength}} অক্ষরের চেয়ে লম্বা হতে হবে।',
530+
longitudeOutOfBounds: 'দ্রাগিমাংস অবশ্যই -১৮০ এবং ১৮০ এর মধ্যে হতে হবে।',
529531
notValidDate: '"{{value}}" একটি বৈধ তারিখ নয়।',
530532
required: 'এই ক্ষেত্রটি প্রয়োজনীয়।',
531533
requiresAtLeast: 'এই ক্ষেত্রটির জন্য কমপক্ষে {{count}} {{label}} প্রয়োজন।',

packages/translations/src/languages/bnIn.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,9 +522,11 @@ export const bnInTranslations: DefaultTranslationsObject = {
522522
invalidInput: 'এই ক্ষেত্রে একটি অবৈধ ইনপুট রয়েছে।',
523523
invalidSelection: 'এই ক্ষেত্রে একটি অবৈধ নির্বাচন রয়েছে।',
524524
invalidSelections: 'এই ক্ষেত্রে নিম্নলিখিত অবৈধ নির্বাচনগুলি রয়েছে:',
525+
latitudeOutOfBounds: 'অক্ষাংশ -90 এবং 90 এর মধ্যে হতে হবে।',
525526
lessThanMin: '{{value}} সর্বনিম্ন অনুমোদিত {{label}} {{min}} এর চেয়ে ছোট।',
526527
limitReached: 'সীমা reached, সর্বাধিক {{max}} আইটেম যোগ করা যাবে।',
527528
longerThanMin: 'এই মানটি সর্বনিম্ন {{minLength}} অক্ষরের চেয়ে লম্বা হতে হবে।',
529+
longitudeOutOfBounds: 'দীর্ঘবিন্ন অবশ্যই -180 এবং 180 এর মধ্যে থাকতে হবে।',
528530
notValidDate: '"{{value}}" একটি বৈধ তারিখ নয়।',
529531
required: 'এই ক্ষেত্রটি প্রয়োজনীয়।',
530532
requiresAtLeast: 'এই ক্ষেত্রটির জন্য কমপক্ষে {{count}} {{label}} প্রয়োজন।',

packages/translations/src/languages/ca.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,10 +519,12 @@ export const caTranslations: DefaultTranslationsObject = {
519519
invalidInput: 'Aquest camp té una entrada invàlida.',
520520
invalidSelection: 'Aquest camp té una selecció invàlida.',
521521
invalidSelections: 'Aquest camp té les següents seleccions invàlides:',
522+
latitudeOutOfBounds: 'La latitud ha de ser entre -90 i 90.',
522523
lessThanMin: '{{value}} és menor que el mínim permès {{label}} de {{min}}.',
523524
limitReached: "S'ha arribat al límit, només es poden afegir {{max}} elements.",
524525
longerThanMin:
525526
'Aquest valor ha de ser més llarg que la longitud mínima de {{minLength}} caràcters.',
527+
longitudeOutOfBounds: 'La longitud ha de ser entre -180 i 180.',
526528
notValidDate: '"{{value}}" no és una data vàlida.',
527529
required: 'Aquest camp és obligatori.',
528530
requiresAtLeast: 'Aquest camp requereix almenys {{count}} {{label}}.',

packages/translations/src/languages/cs.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,11 @@ export const csTranslations: DefaultTranslationsObject = {
515515
invalidInput: 'Toto pole má neplatný vstup.',
516516
invalidSelection: 'Toto pole má neplatný výběr.',
517517
invalidSelections: 'Toto pole má následující neplatné výběry:',
518+
latitudeOutOfBounds: 'Zeměpisná šířka musí být mezi -90 a 90.',
518519
lessThanMin: '{{value}} je nižší než minimálně povolená {{label}} {{min}}.',
519520
limitReached: 'Dosáhnutý limit, mohou být přidány pouze {{max}} položky.',
520521
longerThanMin: 'Tato hodnota musí být delší než minimální délka {{minLength}} znaků.',
522+
longitudeOutOfBounds: 'Zeměpisná délka musí být mezi -180 a 180.',
521523
notValidDate: '"{{value}}" není platné datum.',
522524
required: 'Toto pole je povinné.',
523525
requiresAtLeast: 'Toto pole vyžaduje alespoň {{count}} {{label}}.',

0 commit comments

Comments
 (0)