diff --git a/projects/cdk/date-time/date-fillers.ts b/projects/cdk/date-time/date-fillers.ts new file mode 100644 index 000000000000..eb7c8697c41f --- /dev/null +++ b/projects/cdk/date-time/date-fillers.ts @@ -0,0 +1,18 @@ +import {inject, InjectionToken} from '@angular/core'; +import {RANGE_SEPARATOR_CHAR} from './date-time'; + +// TODO: think about yyyy.mm.dd format +export const TUI_DATE_FILLER = new InjectionToken('date filler for Taiga UI', { + factory: () => `dd.mm.yyyy`, +}); + +export const TUI_DATE_RANGE_FILLER = new InjectionToken( + 'date range filler for Taiga UI', + { + factory: () => { + const dateFiller = inject(TUI_DATE_FILLER); + + return `${dateFiller}${RANGE_SEPARATOR_CHAR}${dateFiller}`; + }, + }, +); diff --git a/projects/cdk/date-time/date-time.ts b/projects/cdk/date-time/date-time.ts index a4c945a3024e..a5f62c0ee4c2 100644 --- a/projects/cdk/date-time/date-time.ts +++ b/projects/cdk/date-time/date-time.ts @@ -18,13 +18,8 @@ export const MIN_YEAR = 0; export const MAX_YEAR = 9999; -// TODO: i18n -export const DATE_FILLER = `дд.мм.гггг`; - export const RANGE_SEPARATOR_CHAR = `${CHAR_NO_BREAK_SPACE}${CHAR_EN_DASH}${CHAR_NO_BREAK_SPACE}`; -export const DATE_RANGE_FILLER = `${DATE_FILLER}${RANGE_SEPARATOR_CHAR}${DATE_FILLER}`; - export const MILLISECONDS_IN_SECOND = 1000; export const SECONDS_IN_MINUTE = 60; diff --git a/projects/cdk/date-time/day-range.ts b/projects/cdk/date-time/day-range.ts index 3a56413b86f6..f0ea130f72e1 100644 --- a/projects/cdk/date-time/day-range.ts +++ b/projects/cdk/date-time/day-range.ts @@ -1,5 +1,5 @@ import {tuiAssert} from '@taiga-ui/cdk/classes'; -import {DATE_FILLER, DATE_RANGE_FILLER, RANGE_SEPARATOR_CHAR} from './date-time'; +import {RANGE_SEPARATOR_CHAR} from './date-time'; import {TuiDay} from './day'; import {TuiMonthRange} from './month-range'; @@ -61,20 +61,24 @@ export class TuiDayRange extends TuiMonthRange { /** * Parse and correct a day range in string format * - * @param rangeString a string of dates in a format DD.MM.Yyyy - DD.MM.Yyyy + * @param rangeString a string of dates in a format dd.mm.yyyy - dd.mm.yyyy * @return normalized day range object */ - static normalizeParse(rangeString: string): TuiDayRange { - const leftDay = TuiDay.normalizeParse(rangeString.slice(0, DATE_FILLER.length)); + static normalizeParse( + rangeString: string, + dateFiller: string, + dateRangeFiller: string, + ): TuiDayRange { + const leftDay = TuiDay.normalizeParse(rangeString.slice(0, dateFiller.length)); - if (rangeString.length < DATE_RANGE_FILLER.length) { + if (rangeString.length < dateRangeFiller.length) { return new TuiDayRange(leftDay, leftDay); } return TuiDayRange.sort( leftDay, TuiDay.normalizeParse( - rangeString.slice(DATE_FILLER.length + RANGE_SEPARATOR_CHAR.length), + rangeString.slice(dateFiller.length + RANGE_SEPARATOR_CHAR.length), ), ); } diff --git a/projects/cdk/date-time/test/date-fillers.spec.ts b/projects/cdk/date-time/test/date-fillers.spec.ts new file mode 100644 index 000000000000..7be167812c51 --- /dev/null +++ b/projects/cdk/date-time/test/date-fillers.spec.ts @@ -0,0 +1,21 @@ +import {TestBed} from '@angular/core/testing'; +import {TUI_DATE_FILLER, TUI_DATE_RANGE_FILLER} from '../date-fillers'; +import {RANGE_SEPARATOR_CHAR} from '../date-time'; + +describe('Date Fillers', () => { + it('TUI_DATE_FILLER is a global token with default value', () => { + TestBed.configureTestingModule({}); + + const result = TestBed.get(TUI_DATE_FILLER); + + expect(result).toBe('dd.mm.yyyy'); + }); + + it('TUI_DATE_RANGE_FILLER is a global token with default value', () => { + TestBed.configureTestingModule({}); + + const result = TestBed.get(TUI_DATE_RANGE_FILLER); + + expect(result).toBe('dd.mm.yyyy' + RANGE_SEPARATOR_CHAR + 'dd.mm.yyyy'); + }); +}); diff --git a/projects/cdk/date-time/test/day-range.spec.ts b/projects/cdk/date-time/test/day-range.spec.ts index e1affd062421..a76e44943d3f 100644 --- a/projects/cdk/date-time/test/day-range.spec.ts +++ b/projects/cdk/date-time/test/day-range.spec.ts @@ -2,6 +2,9 @@ import {RANGE_SEPARATOR_CHAR} from '../date-time'; import {TuiDay} from '../day'; import {TuiDayRange} from '../day-range'; +const DEFAULT_DATE_FILLER = `dd.mm.yyyy`; +const DEFAULT_DATE_RANGE_FILLER = `${DEFAULT_DATE_FILLER}${RANGE_SEPARATOR_CHAR}${DEFAULT_DATE_FILLER}`; + describe('TuiDayRange', () => { describe('static method', () => { describe('sort returns', () => { @@ -41,6 +44,8 @@ describe('TuiDayRange', () => { it('corresponding range in normal case', () => { const result: TuiDayRange = TuiDayRange.normalizeParse( `12.03.4567${RANGE_SEPARATOR_CHAR}07.06.9321`, + DEFAULT_DATE_FILLER, + DEFAULT_DATE_RANGE_FILLER, ); expect(result.from.day).toBe(12); @@ -54,6 +59,8 @@ describe('TuiDayRange', () => { it('corresponding range ignoring wrong delimiters', () => { const result: TuiDayRange = TuiDayRange.normalizeParse( `12#03#4567#!#07#06#9321`, + DEFAULT_DATE_FILLER, + DEFAULT_DATE_RANGE_FILLER, ); expect(result.from.day).toBe(12); @@ -67,6 +74,8 @@ describe('TuiDayRange', () => { it('properly normalized range', () => { const result: TuiDayRange = TuiDayRange.normalizeParse( `00.00.0000${RANGE_SEPARATOR_CHAR}99.99.9999`, + DEFAULT_DATE_FILLER, + DEFAULT_DATE_RANGE_FILLER, ); expect(result.from.day).toBe(1); @@ -80,6 +89,8 @@ describe('TuiDayRange', () => { it('sorted range if the order is wrong', () => { const result: TuiDayRange = TuiDayRange.normalizeParse( `07.06.9321${RANGE_SEPARATOR_CHAR}12.03.4567`, + DEFAULT_DATE_FILLER, + DEFAULT_DATE_RANGE_FILLER, ); expect(result.from.day).toBe(12); @@ -93,6 +104,8 @@ describe('TuiDayRange', () => { it('one day range if rangeString is not long enough', () => { const result: TuiDayRange = TuiDayRange.normalizeParse( `07.06.9321${RANGE_SEPARATOR_CHAR}12.03.4`, + DEFAULT_DATE_FILLER, + DEFAULT_DATE_RANGE_FILLER, ); expect(result.from.day).toBe(7);