Skip to content

Commit 722f5ca

Browse files
Global format config. Implementation for dateFormat, dateTimeFormat, NumberFormat
1 parent 3a8179f commit 722f5ca

6 files changed

Lines changed: 29 additions & 64 deletions

File tree

packages/devextreme/js/__internal/scheduler/a11y_status/a11y_status_text.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import dateLocalization from '@js/common/core/localization/date';
21
import messageLocalization from '@js/common/core/localization/message';
32
import type { ViewType } from '@js/ui/scheduler';
43

4+
import { formatImplicitSchedulerDate, formatImplicitSchedulerMonth } from '../utils/global_formats';
55
import type { NormalizedView } from '../utils/options/types';
66

77
const KEYS = {
@@ -22,8 +22,8 @@ const viewTypeLocalization: Record<ViewType, string> = {
2222
timelineWorkWeek: 'dxScheduler-switcherTimelineWorkWeek',
2323
};
2424

25-
const localizeMonth = (date: Date): string => String(dateLocalization.format(date, 'monthAndYear'));
26-
const localizeDate = (date: Date): string => `${dateLocalization.format(date, 'monthAndDay')}, ${dateLocalization.format(date, 'year')}`;
25+
const localizeMonth = (date: Date): string => formatImplicitSchedulerMonth(date);
26+
const localizeDate = (date: Date): string => formatImplicitSchedulerDate(date);
2727
const localizeCurrentIndicator = (
2828
date: Date,
2929
startDate: Date,

packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import dateLocalization from '@js/common/core/localization/date';
21
import messageLocalization from '@js/common/core/localization/message';
32
import { isDefined } from '@js/core/utils/type';
43

4+
import { formatImplicitSchedulerDate, formatImplicitSchedulerTime } from '../../utils/global_formats';
55
import type { AppointmentProperties } from './m_types';
66

7-
const localizeDate = (date: Date): string => `${dateLocalization.format(date, 'monthAndDay')}, ${dateLocalization.format(date, 'year')}`;
8-
9-
const localizeTime = (date: Date): string => `${dateLocalization.format(date, 'shorttime')}`;
7+
const localizeDate = (date: Date): string => formatImplicitSchedulerDate(date);
8+
const localizeTime = (date: Date): string => formatImplicitSchedulerTime(date);
109

1110
const getDate = (options: AppointmentProperties, propName: 'endDate' | 'startDate'): Date => {
1211
const result = options.dataAccessors.get(propName, options.data);

packages/devextreme/js/__internal/scheduler/m_compact_appointments_helper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { locate, move } from '@js/common/core/animation/translator';
2-
import dateLocalization from '@js/common/core/localization/date';
32
import messageLocalization from '@js/common/core/localization/message';
43
import $, { type dxElementWrapper } from '@js/core/renderer';
54
import { FunctionTemplate } from '@js/core/templates/function_template';
@@ -9,6 +8,7 @@ import type { Appointment } from '@js/ui/scheduler';
98
import { APPOINTMENT_SETTINGS_KEY, LIST_ITEM_CLASS, LIST_ITEM_DATA_KEY } from './constants';
109
import type Scheduler from './m_scheduler';
1110
import type { AppointmentTooltipItem, CompactAppointmentOptions, TargetedAppointment } from './types';
11+
import { formatImplicitSchedulerDate } from './utils/global_formats';
1212

1313
const APPOINTMENT_COLLECTOR_CLASS = 'dx-scheduler-appointment-collector';
1414
const COMPACT_APPOINTMENT_COLLECTOR_CLASS = `${APPOINTMENT_COLLECTOR_CLASS}-compact`;
@@ -185,7 +185,7 @@ export class CompactAppointmentsHelper {
185185
}
186186

187187
private localizeDate(date) {
188-
return `${dateLocalization.format(date, 'monthAndDay')}, ${dateLocalization.format(date, 'year')}`;
188+
return formatImplicitSchedulerDate(date);
189189
}
190190

191191
private getDateText(

packages/devextreme/js/__internal/scheduler/r1/utils/week.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import dateLocalization from '@js/common/core/localization/date';
22
import dateUtils from '@js/core/utils/date';
33

44
import type { CalculateStartViewDate } from '../../types';
5+
import { formatImplicitSchedulerTime } from '../../utils/global_formats';
56
import {
67
getCalculatedFirstDayOfWeek,
78
getValidCellDateForLocalTimeFormat,
@@ -29,7 +30,7 @@ export const getTimePanelCellText = (
2930
viewOffset,
3031
});
3132

32-
return dateLocalization.format(validTimeDate, 'shorttime') as string;
33+
return formatImplicitSchedulerTime(validTimeDate);
3334
};
3435

3536
export const getIntervalDuration = (

packages/devextreme/testing/tests/DevExpress.localization/localization.intl.tests.js

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -775,63 +775,31 @@ QUnit.module('Intl localization', {
775775
});
776776

777777
QUnit.module('Global formatting config (spec, intl)', () => {
778-
QUnit.test('dateTimeFormatPresets overrides explicit shortDate preset', function(assert) {
778+
QUnit.test('global dateFormat supports formatter function values', function(assert) {
779779
const originalConfig = config();
780780

781781
try {
782782
config({
783783
...originalConfig,
784-
dateTimeFormatPresets: {
785-
shortDate: 'dd/MM/yyyy',
786-
},
787-
});
788-
789-
assert.strictEqual(dateLocalization.format(new Date(2020, 0, 2), 'shortDate'), '02/01/2020');
790-
} finally {
791-
config(originalConfig);
792-
}
793-
});
794-
795-
QUnit.test('dateTimeFormatPresets resolves locale map by exact locale and default fallback', function(assert) {
796-
const originalConfig = config();
797-
const oldLocale = locale();
798-
799-
try {
800-
config({
801-
...originalConfig,
802-
dateTimeFormatPresets: {
803-
shortDate: {
804-
default: 'dd/MM/yyyy',
805-
'de-DE': 'dd.MM.yyyy',
806-
},
807-
},
784+
dateFormat: (date) => `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`,
808785
});
809786

810-
locale('de-DE');
811-
assert.strictEqual(dateLocalization.format(new Date(2020, 0, 2), 'shortDate'), '02.01.2020', 'exact locale');
812-
813-
locale('fr-FR');
814-
assert.strictEqual(dateLocalization.format(new Date(2020, 0, 2), 'shortDate'), '02/01/2020', 'default fallback');
787+
assert.strictEqual(dateLocalization.format(new Date(2020, 0, 2), config().dateFormat), '2-1-2020');
815788
} finally {
816-
locale(oldLocale);
817789
config(originalConfig);
818790
}
819791
});
820792

821-
QUnit.test('dateTimeFormatPresets supports formatter function values', function(assert) {
793+
QUnit.test('global dateTimeFormat supports formatter function values', function(assert) {
822794
const originalConfig = config();
823795

824796
try {
825797
config({
826798
...originalConfig,
827-
dateTimeFormatPresets: {
828-
shortDate: {
829-
default: (date) => `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`,
830-
},
831-
},
799+
dateTimeFormat: (date) => `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()} ${date.getHours()}:${date.getMinutes()}`,
832800
});
833801

834-
assert.strictEqual(dateLocalization.format(new Date(2020, 0, 2), 'shortDate'), '2-1-2020');
802+
assert.strictEqual(dateLocalization.format(new Date(2020, 0, 2, 14, 5), config().dateTimeFormat), '2/1/2020 14:5');
835803
} finally {
836804
config(originalConfig);
837805
}

packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentTooltip.tests.js

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,37 +72,34 @@ module('Global formatting config (spec): Scheduler tooltip', {
7272
assert.strictEqual(scheduler.tooltip.getDateText(), 'T11 - T12');
7373
});
7474

75-
test('implicit Scheduler tooltip time format uses dateTimeFormatPresets.shortTime when global timeFormat is not set', async function(assert) {
76-
config({
77-
...this.originalConfig,
78-
dateTimeFormatPresets: {
79-
shortTime: (date) => `P${date.getHours()}`,
80-
},
81-
});
82-
75+
test('implicit Scheduler tooltip uses built-in format when global timeFormat is not set', async function(assert) {
8376
const scheduler = await createScheduler();
8477
const clock = sinon.useFakeTimers();
8578
await scheduler.appointments.click(0, clock);
8679
clock.restore();
8780

88-
assert.strictEqual(scheduler.tooltip.getDateText(), 'P11 - P12');
81+
assert.strictEqual(scheduler.tooltip.getDateText(), '11:00 AM - 12:00 PM');
8982
});
9083

91-
test('global timeFormat has priority over dateTimeFormatPresets.shortTime for implicit Scheduler tooltip format', async function(assert) {
84+
test('implicit Scheduler tooltip date/time use global dateFormat and timeFormat', async function(assert) {
9285
config({
9386
...this.originalConfig,
94-
timeFormat: (date) => `G${date.getHours()}`,
95-
dateTimeFormatPresets: {
96-
shortTime: (date) => `P${date.getHours()}`,
97-
},
87+
dateFormat: (date) => `D${date.getDate()}`,
88+
timeFormat: (date) => `T${date.getHours()}`,
9889
});
9990

100-
const scheduler = await createScheduler();
91+
const scheduler = await createScheduler({
92+
dataSource: [{
93+
text: 'Task 1',
94+
startDate: new Date(2015, 1, 9, 23, 0),
95+
endDate: new Date(2015, 1, 10, 1, 0),
96+
}],
97+
});
10198
const clock = sinon.useFakeTimers();
10299
await scheduler.appointments.click(0, clock);
103100
clock.restore();
104101

105-
assert.strictEqual(scheduler.tooltip.getDateText(), 'G11 - G12');
102+
assert.strictEqual(scheduler.tooltip.getDateText(), 'D9, T23 - D10, T1');
106103
});
107104
});
108105

0 commit comments

Comments
 (0)