Skip to content

Commit d1cc1ec

Browse files
committed
Move generateDay functionality to dateutils and add tests
1 parent aa6becb commit d1cc1ec

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed

src/dateutils.spec.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import XDate from 'xdate';
2-
import {sameMonth, sameWeek, isLTE, isGTE, month, page} from './dateutils';
2+
import {sameMonth, sameWeek, isLTE, isGTE, month, page, generateDay} from './dateutils';
33

44
describe('dateutils', function () {
55
describe('sameMonth()', function () {
@@ -162,4 +162,21 @@ describe('dateutils', function () {
162162
}
163163
});
164164
});
165+
166+
describe('generateDay', () => {
167+
it('should generate a day in string format with an offset', () => {
168+
expect(generateDay('2017-09-22', 2)).toBe('2017-09-24');
169+
expect(generateDay('2017-09-22', -2)).toBe('2017-09-20');
170+
});
171+
172+
it('should generate the same day when offset was not sent', () => {
173+
expect(generateDay('2017-09-22')).toBe('2017-09-22');
174+
});
175+
176+
it('should handle month and year changes', () => {
177+
expect(generateDay('2017-10-22', 10)).toBe('2017-11-01');
178+
expect(generateDay('2017-12-26', 10)).toBe('2018-01-05');
179+
expect(generateDay('2018-01-01', -3)).toBe('2017-12-29');
180+
});
181+
});
165182
});

src/dateutils.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
const XDate = require('xdate');
2-
const {parseDate} = require('./interface');
2+
const {parseDate, toMarkingFormat} = require('./interface');
33

44
const latinNumbersPattern = /[0-9]/g;
55

66
export function sameMonth(a: XDate, b: XDate) {
7-
return a.getFullYear() === b.getFullYear() &&
8-
a.getMonth() === b.getMonth();
7+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
98
}
109

1110
export function sameDate(a: XDate, b: XDate) {
12-
return a.getFullYear() === b.getFullYear() &&
13-
a.getMonth() === b.getMonth() &&
14-
a.getDate() === b.getDate();
11+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
1512
}
1613

1714
export function sameWeek(a: XDate, b: XDate, firstDayOfWeek: number) {
@@ -144,3 +141,8 @@ export function getWeekDates(date: XDate, firstDay = 0, format?: string) {
144141
return daysArray;
145142
}
146143
}
144+
145+
export function generateDay(originDate: string, daysOffset = 0) {
146+
const baseDate = new XDate(originDate);
147+
return toMarkingFormat(baseDate.clone().addDays(daysOffset));
148+
}

src/timeline-list/useTimelinePages.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
import {RefObject, useCallback, useRef, useState} from 'react';
2-
import XDate from 'xdate';
2+
33
import inRange from 'lodash/inRange';
44
import times from 'lodash/times';
55
import debounce from 'lodash/debounce';
66

77
import constants from '../commons/constants';
8-
import {toMarkingFormat} from '../interface';
8+
import {generateDay} from '../dateutils';
99

1010
const PAGES_COUNT = 100;
1111
const NEAR_EDGE_THRESHOLD = 10;
1212
export const INITIAL_PAGE = Math.floor(PAGES_COUNT / 2);
1313

14-
const generateDay = (originDate: string, daysOffset: number) => {
15-
const baseDate = new XDate(originDate);
16-
return toMarkingFormat(baseDate.clone().addDays(daysOffset));
17-
};
1814

1915
interface UseTimelinePagesProps {
2016
date: string;

0 commit comments

Comments
 (0)