Skip to content

Commit d2e3296

Browse files
authored
Merge pull request #1701 from wix/feat/formatting_tool
Calendars date format service
2 parents 99e49a0 + 80038f0 commit d2e3296

File tree

4 files changed

+68
-4
lines changed

4 files changed

+68
-4
lines changed

src/index.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ export {default as Calendar, CalendarProps} from './calendar';
22
export {default as CalendarList, CalendarListProps} from './calendar-list';
33
export {default as Agenda, AgendaProps} from './agenda';
44
export {default as ExpandableCalendar, ExpandableCalendarProps} from './expandableCalendar';
5+
export {default as WeekCalendar, WeekCalendarProps} from './expandableCalendar/WeekCalendar';
56
export {default as AgendaList, AgendaListProps} from './expandableCalendar/agendaList';
6-
export {default as Timeline, TimelineProps} from './timeline/Timeline';
7+
export {default as CalendarContext} from './expandableCalendar/Context';
78
export {default as CalendarProvider, CalendarContextProviderProps} from './expandableCalendar/Context/Provider';
89
export {default as asCalendarConsumer} from './expandableCalendar/asCalendarConsumer';
9-
export {default as WeekCalendar, WeekCalendarProps} from './expandableCalendar/WeekCalendar';
10+
export {default as Timeline, TimelineProps} from './timeline/Timeline';
11+
export * from './services';
1012
export {default as LocaleConfig} from 'xdate';
11-
export {default as CalendarContext} from './expandableCalendar/Context';

src/interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const XDate = require('xdate');
22

3-
function padNumber(n: number) {
3+
export function padNumber(n: number) {
44
if (n < 10) {
55
return '0' + n;
66
}

src/services/index.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import {isUndefined, isDate, isString, isNumber} from 'lodash';
2+
import XDate from 'xdate';
3+
const {padNumber, toMarkingFormat} = require('../interface');
4+
5+
export function getCalendarDateString(date?: Date | string | number) {
6+
if (!isUndefined(date)) {
7+
if (isDate(date) && !isNaN(date.getFullYear())) {
8+
return date.getFullYear() + '-' + padNumber(date.getMonth() + 1) + '-' + padNumber(date.getDate());
9+
} else if (isString(date)) {
10+
// issue with strings and XDate's utc-mode - returns one day before
11+
return toMarkingFormat(new XDate(date, false));
12+
} else if (isNumber(date)) {
13+
return toMarkingFormat(new XDate(date, true));
14+
}
15+
throw 'Invalid Date';
16+
}
17+
}

src/services/services.spec.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {getCalendarDateString} from '../services';
2+
3+
describe('services', function () {
4+
describe('getCalendarDateString()', function () {
5+
const timestamp = 1585561899000;
6+
const expectedFormattedDate = '2020-03-30';
7+
const throwMessage = 'Invalid Date';
8+
const epochDate = '1970-01-01';
9+
10+
it('should return undefined for undefined date', function () {
11+
expect(getCalendarDateString()).toEqual(undefined);
12+
});
13+
14+
it('should return same date for dashed date string', function () {
15+
expect(getCalendarDateString('2020-03-30')).toEqual(expectedFormattedDate);
16+
});
17+
18+
it('should return dashed date for JS Date', function () {
19+
expect(getCalendarDateString(new Date('30 Mar 2020'))).toEqual(expectedFormattedDate);
20+
});
21+
22+
it('should throw "Invalid Date" for invalid JS Date', function () {
23+
expect(() => {getCalendarDateString(new Date('30/03/2020'));}).toThrow(throwMessage);
24+
});
25+
26+
it('should return dashed date for timestamp number', function () {
27+
expect(getCalendarDateString(timestamp)).toEqual(expectedFormattedDate);
28+
});
29+
30+
it('should return epoch date for invalid timestamp number', function () {
31+
expect(getCalendarDateString(666)).toEqual(epochDate);
32+
});
33+
34+
it('should return dashed date for slashed date string', function () {
35+
expect(getCalendarDateString('2020/03/30')).toEqual(expectedFormattedDate);
36+
});
37+
38+
it('should return dashed date for formatted date string', function () {
39+
expect(getCalendarDateString('30 Mar 2020')).toEqual(expectedFormattedDate);
40+
});
41+
42+
it('should return "Invalid Date" for invalid date string', function () {
43+
expect(getCalendarDateString('30/3/2020')).toEqual(throwMessage);
44+
});
45+
});
46+
});

0 commit comments

Comments
 (0)