Skip to content

Commit 622f0da

Browse files
committed
feat: use locale configuration for startWeekOn
for default value
1 parent 5a1e3ea commit 622f0da

File tree

5 files changed

+66
-57
lines changed

5 files changed

+66
-57
lines changed

pages/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default function Playground() {
2424
const [displayFormat, setDisplayFormat] = useState("YYYY-MM-DD");
2525
const [readOnly, setReadOnly] = useState(false);
2626
const [startFrom, setStartFrom] = useState("2023-03-01");
27-
const [startWeekOn, setStartWeekOn] = useState("sun");
27+
const [startWeekOn, setStartWeekOn] = useState(null);
2828

2929
return (
3030
<div className="px-4 py-8">

src/components/Calendar/Week.tsx

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,44 @@
11
import dayjs from "dayjs";
2+
import weekday from "dayjs/plugin/weekday";
23
import React, { useContext } from "react";
34

45
import DatepickerContext from "../../contexts/DatepickerContext";
56
import { loadLanguageModule, shortString, ucFirst } from "../../helpers";
67

8+
dayjs.extend(weekday);
9+
710
const Week: React.FC = () => {
811
const { i18n, startWeekOn } = useContext(DatepickerContext);
912
loadLanguageModule(i18n);
10-
let startDateModifier = 0;
11-
switch (startWeekOn) {
12-
case "mon":
13-
startDateModifier = 1;
14-
break;
15-
case "tue":
16-
startDateModifier = 2;
17-
break;
18-
case "wed":
19-
startDateModifier = 3;
20-
break;
21-
case "thu":
22-
startDateModifier = 4;
23-
break;
24-
case "fri":
25-
startDateModifier = 5;
26-
break;
27-
case "sat":
28-
startDateModifier = 6;
29-
break;
30-
case "sun":
31-
startDateModifier = 0;
32-
break;
33-
default:
34-
startDateModifier = 0;
35-
break;
13+
let startDateModifier = dayjs().locale(i18n).weekday(0).get("day");
14+
if (startWeekOn) {
15+
switch (startWeekOn) {
16+
case "mon":
17+
startDateModifier = 1;
18+
break;
19+
case "tue":
20+
startDateModifier = 2;
21+
break;
22+
case "wed":
23+
startDateModifier = 3;
24+
break;
25+
case "thu":
26+
startDateModifier = 4;
27+
break;
28+
case "fri":
29+
startDateModifier = 5;
30+
break;
31+
case "sat":
32+
startDateModifier = 6;
33+
break;
34+
case "sun":
35+
startDateModifier = 0;
36+
break;
37+
default:
38+
break;
39+
}
3640
}
41+
3742
return (
3843
<div className="grid grid-cols-7 border-b border-gray-300 dark:border-gray-700 py-2">
3944
{[0, 1, 2, 3, 4, 5, 6].map((item, index) => (

src/components/Calendar/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ const Calendar: React.FC<Props> = ({
6464
const previous = useCallback(() => {
6565
return getLastDaysInMonth(
6666
previousMonth(date),
67-
getNumberOfDay(getFirstDayInMonth(date).ddd, startWeekOn)
67+
getNumberOfDay(getFirstDayInMonth(date).ddd, i18n, startWeekOn)
6868
);
69-
}, [date, startWeekOn]);
69+
}, [date, i18n, startWeekOn]);
7070

7171
const current = useCallback(() => {
7272
return getDaysInMonth(formatDate(date));

src/components/Datepicker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const Datepicker: React.FC<Props> = ({
6969
containerClassName = null,
7070
displayFormat = "YYYY-MM-DD",
7171
readOnly = false,
72-
startWeekOn = "sun"
72+
startWeekOn
7373
}) => {
7474
// Ref
7575
const containerRef = useRef<HTMLDivElement>(null);

src/helpers/index.ts

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import dayjs from "dayjs";
2+
import weekday from "dayjs/plugin/weekday";
23

4+
dayjs.extend(weekday);
35
export function getTextColorByPrimaryColor(color: string) {
46
switch (color) {
57
case "blue":
@@ -123,35 +125,37 @@ export function getLastElementsInArray(array: number[] = [], size = 0) {
123125
return result.reverse();
124126
}
125127

126-
export function getNumberOfDay(dayString: string, startWeekOn = "sun"): number {
128+
export function getNumberOfDay(dayString: string, i18n: string, startWeekOn?: string): number {
127129
let number = 0;
128130

129-
let startDateModifier = 0;
130-
switch (startWeekOn) {
131-
case "mon":
132-
startDateModifier = 6;
133-
break;
134-
case "tue":
135-
startDateModifier = 5;
136-
break;
137-
case "wed":
138-
startDateModifier = 4;
139-
break;
140-
case "thu":
141-
startDateModifier = 3;
142-
break;
143-
case "fri":
144-
startDateModifier = 2;
145-
break;
146-
case "sat":
147-
startDateModifier = 1;
148-
break;
149-
case "sun":
150-
startDateModifier = 0;
151-
break;
152-
default:
153-
startDateModifier = 0;
154-
break;
131+
let startDateModifier = 7 - dayjs().locale(i18n).weekday(0).get("day");
132+
133+
if (startWeekOn) {
134+
switch (startWeekOn) {
135+
case "mon":
136+
startDateModifier = 6;
137+
break;
138+
case "tue":
139+
startDateModifier = 5;
140+
break;
141+
case "wed":
142+
startDateModifier = 4;
143+
break;
144+
case "thu":
145+
startDateModifier = 3;
146+
break;
147+
case "fri":
148+
startDateModifier = 2;
149+
break;
150+
case "sat":
151+
startDateModifier = 1;
152+
break;
153+
case "sun":
154+
startDateModifier = 0;
155+
break;
156+
default:
157+
break;
158+
}
155159
}
156160

157161
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].forEach(

0 commit comments

Comments
 (0)