Skip to content

Commit 6e467f8

Browse files
authored
fix: first day of week bcp 47 parsing in middle of other extensions (#8877)
* fix: first day of week bcp 47 parsing in middle of other extensions * add value to story * fix iso8601 case
1 parent fa7bfb5 commit 6e467f8

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

packages/@internationalized/date/src/queries.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,9 @@ function getWeekStart(locale: string): number {
268268
}
269269
let region = getRegion(locale);
270270
if (locale.includes('-fw-')) {
271-
let day = locale.split('-fw-')[1];
271+
// pull the value for the attribute fw from strings such as en-US-u-ca-iso8601-fw-tue or en-US-u-ca-iso8601-fw-mon-nu-thai
272+
// where the fw attribute could be followed by another unicode locale extension or not
273+
let day = locale.split('-fw-')[1].split('-')[0];
272274
if (day === 'mon') {
273275
weekInfo = {firstDay: 1};
274276
} else if (day === 'tue') {
@@ -284,7 +286,7 @@ function getWeekStart(locale: string): number {
284286
} else {
285287
weekInfo = {firstDay: 0};
286288
}
287-
} else if (locale.includes('u-ca-iso8601')) {
289+
} else if (locale.includes('-ca-iso8601')) {
288290
weekInfo = {firstDay: 1};
289291
} else {
290292
weekInfo = {firstDay: region ? weekStartData[region] || 0 : 0};

packages/@internationalized/date/tests/queries.test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,11 @@ describe('queries', function () {
281281

282282
// override first day of week
283283
expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-ca-iso8601-fw-tue')).toEqual(new CalendarDate(2021, 8, 3));
284+
285+
// override applied if extension appears in the middle of other extensions
286+
expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-nu-thai-ca-iso8601')).toEqual(new CalendarDate(2021, 8, 2));
287+
expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-nu-thai-ca-iso8601-fw-tue')).toEqual(new CalendarDate(2021, 8, 3));
288+
expect(startOfWeek(new CalendarDate(2021, 8, 4), 'en-US-u-ca-iso8601-fw-tue-nu-thai')).toEqual(new CalendarDate(2021, 8, 3));
284289
});
285290
});
286291

packages/react-aria-components/stories/Calendar.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ export const CalendarFirstDayOfWeekExample: StoryObj<CalendarFirstDayOfWeekExamp
161161
argTypes: {
162162
locale: {
163163
control: 'select',
164-
options: ['en-US-u-ca-iso8601-fw-tue', 'en-US-u-ca-iso8601', 'en-US', 'fr-FR-u-ca-iso8601-fw-tue', 'fr-FR-u-ca-iso8601', 'fr-FR']
164+
options: ['en-US-u-ca-iso8601-fw-tue', 'en-US-u-ca-iso8601', 'en-US', 'fr-FR-u-ca-iso8601-fw-tue', 'fr-FR-u-ca-iso8601', 'fr-FR', 'en-US-u-ca-iso8601-fw-tue-nu-thai']
165165
}
166166
}
167167
};

0 commit comments

Comments
 (0)