Skip to content

Commit c43891b

Browse files
authored
fix(db-mongodb): localized dates being returned as date objects instead of strings (#12354)
Fixes #12334 We weren't passing locale through to the Date transformer function so localized dates were being read as objects instead of strings.
1 parent 3701de5 commit c43891b

File tree

6 files changed

+90
-0
lines changed

6 files changed

+90
-0
lines changed

packages/db-mongodb/src/utilities/transform.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ export const transform = ({
425425
for (const locale of config.localization.localeCodes) {
426426
sanitizeDate({
427427
field,
428+
locale,
428429
ref: fieldRef,
429430
value: fieldRef[locale],
430431
})
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import type { CollectionConfig } from 'payload'
2+
3+
import { localizedDateFieldsSlug } from '../../shared.js'
4+
5+
export const LocalizedDateFields: CollectionConfig = {
6+
slug: localizedDateFieldsSlug,
7+
versions: {
8+
drafts: true,
9+
},
10+
fields: [
11+
{
12+
type: 'date',
13+
name: 'localizedDate',
14+
localized: true,
15+
},
16+
{
17+
type: 'date',
18+
name: 'date',
19+
},
20+
],
21+
}

test/localization/config.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { devUser } from '../credentials.js'
1111
import { ArrayCollection } from './collections/Array/index.js'
1212
import { BlocksCollection } from './collections/Blocks/index.js'
1313
import { Group } from './collections/Group/index.js'
14+
import { LocalizedDateFields } from './collections/LocalizedDateFields/index.js'
1415
import { LocalizedDrafts } from './collections/LocalizedDrafts/index.js'
1516
import { LocalizedWithinLocalized } from './collections/LocalizedWithinLocalized/index.js'
1617
import { NestedArray } from './collections/NestedArray/index.js'
@@ -25,6 +26,7 @@ import {
2526
defaultLocale,
2627
englishTitle,
2728
hungarianLocale,
29+
localizedDateFieldsSlug,
2830
localizedPostsSlug,
2931
localizedSortSlug,
3032
portugueseLocale,
@@ -64,6 +66,7 @@ export default buildConfigWithDefaults({
6466
NestedArray,
6567
NestedFields,
6668
LocalizedDrafts,
69+
LocalizedDateFields,
6770
{
6871
admin: {
6972
listSearchableFields: 'name',
@@ -478,6 +481,14 @@ export default buildConfigWithDefaults({
478481
},
479482
})
480483

484+
await payload.create({
485+
collection: localizedDateFieldsSlug,
486+
data: {
487+
localizedDate: new Date().toISOString(),
488+
date: new Date().toISOString(),
489+
},
490+
})
491+
481492
console.log('SEED 1')
482493

483494
await payload.create({

test/localization/int.spec.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
defaultLocale as englishLocale,
2828
englishTitle,
2929
hungarianLocale,
30+
localizedDateFieldsSlug,
3031
localizedPostsSlug,
3132
localizedSortSlug,
3233
portugueseLocale,
@@ -431,6 +432,32 @@ describe('Localization', () => {
431432
})
432433
})
433434

435+
describe('Localized date', () => {
436+
it('can create a localized date', async () => {
437+
const document = await payload.create({
438+
collection: localizedDateFieldsSlug,
439+
data: {
440+
localizedDate: new Date().toISOString(),
441+
date: new Date().toISOString(),
442+
},
443+
})
444+
expect(document.localizedDate).toBeTruthy()
445+
})
446+
447+
it('data is typed as string', async () => {
448+
const document = await payload.create({
449+
collection: localizedDateFieldsSlug,
450+
data: {
451+
localizedDate: new Date().toISOString(),
452+
date: new Date().toISOString(),
453+
},
454+
})
455+
456+
expect(typeof document.localizedDate).toBe('string')
457+
expect(typeof document.date).toBe('string')
458+
})
459+
})
460+
434461
describe('Localized Sort Count', () => {
435462
const expectedTotalDocs = 5
436463
const posts: LocalizedSort[] = []

test/localization/payload-types.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export interface Config {
7272
'nested-arrays': NestedArray;
7373
'nested-field-tables': NestedFieldTable;
7474
'localized-drafts': LocalizedDraft;
75+
'localized-date-fields': LocalizedDateField;
7576
users: User;
7677
'localized-posts': LocalizedPost;
7778
'no-localized-fields': NoLocalizedField;
@@ -97,6 +98,7 @@ export interface Config {
9798
'nested-arrays': NestedArraysSelect<false> | NestedArraysSelect<true>;
9899
'nested-field-tables': NestedFieldTablesSelect<false> | NestedFieldTablesSelect<true>;
99100
'localized-drafts': LocalizedDraftsSelect<false> | LocalizedDraftsSelect<true>;
101+
'localized-date-fields': LocalizedDateFieldsSelect<false> | LocalizedDateFieldsSelect<true>;
100102
users: UsersSelect<false> | UsersSelect<true>;
101103
'localized-posts': LocalizedPostsSelect<false> | LocalizedPostsSelect<true>;
102104
'no-localized-fields': NoLocalizedFieldsSelect<false> | NoLocalizedFieldsSelect<true>;
@@ -330,6 +332,18 @@ export interface LocalizedDraft {
330332
createdAt: string;
331333
_status?: ('draft' | 'published') | null;
332334
}
335+
/**
336+
* This interface was referenced by `Config`'s JSON-Schema
337+
* via the `definition` "localized-date-fields".
338+
*/
339+
export interface LocalizedDateField {
340+
id: string;
341+
localizedDate?: string | null;
342+
date?: string | null;
343+
updatedAt: string;
344+
createdAt: string;
345+
_status?: ('draft' | 'published') | null;
346+
}
333347
/**
334348
* This interface was referenced by `Config`'s JSON-Schema
335349
* via the `definition` "users".
@@ -713,6 +727,10 @@ export interface PayloadLockedDocument {
713727
relationTo: 'localized-drafts';
714728
value: string | LocalizedDraft;
715729
} | null)
730+
| ({
731+
relationTo: 'localized-date-fields';
732+
value: string | LocalizedDateField;
733+
} | null)
716734
| ({
717735
relationTo: 'users';
718736
value: string | User;
@@ -952,6 +970,17 @@ export interface LocalizedDraftsSelect<T extends boolean = true> {
952970
createdAt?: T;
953971
_status?: T;
954972
}
973+
/**
974+
* This interface was referenced by `Config`'s JSON-Schema
975+
* via the `definition` "localized-date-fields_select".
976+
*/
977+
export interface LocalizedDateFieldsSelect<T extends boolean = true> {
978+
localizedDate?: T;
979+
date?: T;
980+
updatedAt?: T;
981+
createdAt?: T;
982+
_status?: T;
983+
}
955984
/**
956985
* This interface was referenced by `Config`'s JSON-Schema
957986
* via the `definition` "users_select".

test/localization/shared.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const hungarianLocale = 'hu'
1212

1313
// Slugs
1414
export const localizedPostsSlug = 'localized-posts'
15+
export const localizedDateFieldsSlug = 'localized-date-fields'
1516
export const withLocalizedRelSlug = 'with-localized-relationship'
1617
export const relationshipLocalizedSlug = 'relationship-localized'
1718
export const withRequiredLocalizedFields = 'localized-required'

0 commit comments

Comments
 (0)