1 | import React from 'react';
|
2 | import dayjs from 'dayjs';
|
3 | import localeData from 'dayjs/plugin/localeData';
|
4 | import utc from 'dayjs/plugin/utc';
|
5 |
|
6 | dayjs.extend(localeData);
|
7 | dayjs.extend(utc);
|
8 |
|
9 | const useSurroundingTimeUnits = (visibleDate: string) => {
|
10 | return React.useMemo(() => {
|
11 | const startOfMonth = dayjs(visibleDate).local().startOf('month');
|
12 | const endOfMonth = dayjs(visibleDate).local().endOf('month');
|
13 |
|
14 | const month = {
|
15 | current: {
|
16 | start: startOfMonth,
|
17 | end: endOfMonth,
|
18 | },
|
19 | next: {
|
20 | start: startOfMonth.add(1, 'month').startOf('month'),
|
21 | end: endOfMonth.add(1, 'month').endOf('month'),
|
22 | },
|
23 | last: {
|
24 | start: startOfMonth.subtract(1, 'month').startOf('month'),
|
25 | end: endOfMonth.subtract(1, 'month').endOf('month'),
|
26 | },
|
27 | afterNext: startOfMonth.add(2, 'month'),
|
28 | beforeLast: endOfMonth.subtract(2, 'month'),
|
29 | };
|
30 |
|
31 | const startOfYear = dayjs(visibleDate).local().startOf('year');
|
32 | const endOfYear = dayjs(visibleDate).local().endOf('year');
|
33 |
|
34 | const year = {
|
35 | current: {
|
36 | start: startOfYear,
|
37 | end: endOfYear,
|
38 | },
|
39 | next: {
|
40 | start: startOfYear.add(1, 'year').startOf('year'),
|
41 | persistMonth: dayjs(visibleDate).local().add(1, 'year'),
|
42 | end: endOfYear.add(1, 'year').endOf('year'),
|
43 | },
|
44 | last: {
|
45 | start: startOfYear.subtract(1, 'year').startOf('year'),
|
46 | persistMonth: dayjs(visibleDate).local().subtract(1, 'year'),
|
47 | end: endOfYear.subtract(1, 'year').endOf('year'),
|
48 | },
|
49 | afterNext: startOfYear.add(2, 'year'),
|
50 | beforeLast: endOfYear.subtract(2, 'year'),
|
51 | };
|
52 |
|
53 | return {
|
54 | year,
|
55 | month,
|
56 | };
|
57 | }, [visibleDate]);
|
58 | };
|
59 |
|
60 | export default useSurroundingTimeUnits;
|