Skip to content

Commit d57a05f

Browse files
committed
remove dependency on getDayWeekName from adapters
1 parent 17dc370 commit d57a05f

File tree

6 files changed

+214
-42
lines changed

6 files changed

+214
-42
lines changed

packages/lab/src/__tests__/__e2e__/date-picker/DatePicker.range.cy.tsx

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { DateDetailError, type SaltDateAdapter } from "@salt-ds/date-adapters";
1+
import {
2+
DateDetailError,
3+
type DateFrameworkType,
4+
type SaltDateAdapter,
5+
} from "@salt-ds/date-adapters";
26
import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
37
import { AdapterDayjs } from "@salt-ds/date-adapters/dayjs";
48
import { AdapterLuxon } from "@salt-ds/date-adapters/luxon";
@@ -11,6 +15,9 @@ import {
1115
} from "@salt-ds/lab";
1216

1317
import * as datePickerStories from "@stories/date-picker/date-picker.stories";
18+
import type { Dayjs } from "dayjs";
19+
import type { DateTime } from "luxon";
20+
import type { Moment } from "moment/moment";
1421

1522
// Initialize adapters
1623
const adapterDateFns = new AdapterDateFns();
@@ -935,6 +942,31 @@ describe("GIVEN a DatePicker where selectionVariant is range", () => {
935942
/>,
936943
);
937944

945+
const isDayUnselectable = (day: DateFrameworkType) => {
946+
let dayOfWeek: number;
947+
948+
if (adapter.lib === "luxon") {
949+
// Luxon: 1 (Monday) to 7 (Sunday)
950+
dayOfWeek = (day as DateTime).weekday;
951+
} else if (adapter.lib === "moment") {
952+
// Moment: 0 (Sunday) to 6 (Saturday)
953+
dayOfWeek = (day as Moment).day();
954+
} else if (adapter.lib === "dayjs") {
955+
// Day.js: 0 (Sunday) to 6 (Saturday)
956+
dayOfWeek = (day as Dayjs).day();
957+
} else {
958+
// date-fns: 0 (Sunday) to 6 (Saturday)
959+
dayOfWeek = (day as Date).getDay();
960+
}
961+
962+
const isWeekend =
963+
adapter.lib === "luxon"
964+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
965+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
966+
967+
return isWeekend ? "weekends are un-selectable" : false;
968+
};
969+
938970
const startDate = adapter.parse("01 Jan 2025", "DD MMM YYYY").date;
939971
const endDate = adapter.parse("31 Jan 2025", "DD MMM YYYY").date;
940972
let currentDate = adapter.clone(startDate);
@@ -955,12 +987,7 @@ describe("GIVEN a DatePicker where selectionVariant is range", () => {
955987
) {
956988
formattedDate = `End selected range: ${adapter.format(currentDate, "dddd D MMMM YYYY")}`;
957989
}
958-
const dayOfWeek = adapter.getDayOfWeek(currentDate);
959-
const isWeekend =
960-
(adapter.lib === "luxon" &&
961-
(dayOfWeek === 7 || dayOfWeek === 6)) ||
962-
(adapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
963-
if (isWeekend) {
990+
if (isDayUnselectable(currentDate)) {
964991
// Verify weekend dates are disabled
965992
cy.findByRole("button", { name: formattedDate }).should(
966993
"have.attr",

packages/lab/src/__tests__/__e2e__/date-picker/DatePicker.single.cy.tsx

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { DateDetailError, type SaltDateAdapter } from "@salt-ds/date-adapters";
1+
import {
2+
DateDetailError,
3+
type DateFrameworkType,
4+
type SaltDateAdapter,
5+
} from "@salt-ds/date-adapters";
26
import { AdapterDateFns } from "@salt-ds/date-adapters/date-fns";
37
import { AdapterDayjs } from "@salt-ds/date-adapters/dayjs";
48
import { AdapterLuxon } from "@salt-ds/date-adapters/luxon";
@@ -10,6 +14,9 @@ import {
1014
DatePickerSingleInput,
1115
} from "@salt-ds/lab";
1216
import * as datePickerStories from "@stories/date-picker/date-picker.stories";
17+
import type { Dayjs } from "dayjs";
18+
import type { DateTime } from "luxon";
19+
import type { Moment } from "moment";
1320

1421
// Initialize adapters
1522
const adapterDateFns = new AdapterDateFns();
@@ -793,12 +800,33 @@ describe("GIVEN a DatePicker where selectionVariant is single", () => {
793800
)
794801
? `Selected date: ${adapter.format(currentDate, "dddd D MMMM YYYY")}`
795802
: adapter.format(currentDate, "dddd D MMMM YYYY");
796-
const dayOfWeek = adapter.getDayOfWeek(currentDate);
797-
const isWeekend =
798-
(adapter.lib === "luxon" &&
799-
(dayOfWeek === 7 || dayOfWeek === 6)) ||
800-
(adapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
801-
if (isWeekend) {
803+
804+
const isDayUnselectable = (day: DateFrameworkType) => {
805+
let dayOfWeek: number;
806+
807+
if (adapter.lib === "luxon") {
808+
// Luxon: 1 (Monday) to 7 (Sunday)
809+
dayOfWeek = (day as DateTime).weekday;
810+
} else if (adapter.lib === "moment") {
811+
// Moment: 0 (Sunday) to 6 (Saturday)
812+
dayOfWeek = (day as Moment).day();
813+
} else if (adapter.lib === "dayjs") {
814+
// Day.js: 0 (Sunday) to 6 (Saturday)
815+
dayOfWeek = (day as Dayjs).day();
816+
} else {
817+
// date-fns: 0 (Sunday) to 6 (Saturday)
818+
dayOfWeek = (day as Date).getDay();
819+
}
820+
821+
const isWeekend =
822+
adapter.lib === "luxon"
823+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
824+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
825+
826+
return isWeekend ? "weekends are un-selectable" : false;
827+
};
828+
829+
if (isDayUnselectable(currentDate)) {
802830
// Verify weekend dates are disabled
803831
cy.findByRole("button", { name: formattedDate }).should(
804832
"have.attr",

packages/lab/stories/calendar/calendar.stories.tsx

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ import "dayjs/locale/es"; // Import the Spanish locale
4343
import { es as dateFnsEs } from "date-fns/locale";
4444
import "moment/dist/locale/es";
4545
import { withDateMock } from ".storybook/decorators/withDateMock";
46+
import type { Dayjs } from "dayjs";
47+
import type { DateTime } from "luxon";
48+
import type { Moment } from "moment/moment";
4649

4750
export default {
4851
title: "Lab/Calendar",
@@ -687,13 +690,29 @@ export const UnselectableDates: StoryFn<React.FC<CalendarSingleProps>> = (
687690
args,
688691
) => {
689692
const { dateAdapter } = useLocalization();
690-
const isDayUnselectable = (day: ReturnType<typeof dateAdapter.date>) => {
691-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
693+
const isDayUnselectable = (day: DateFrameworkType) => {
694+
let dayOfWeek: number;
695+
696+
if (dateAdapter.lib === "luxon") {
697+
// Luxon: 1 (Monday) to 7 (Sunday)
698+
dayOfWeek = (day as DateTime).weekday;
699+
} else if (dateAdapter.lib === "moment") {
700+
// Moment: 0 (Sunday) to 6 (Saturday)
701+
dayOfWeek = (day as Moment).day();
702+
} else if (dateAdapter.lib === "dayjs") {
703+
// Day.js: 0 (Sunday) to 6 (Saturday)
704+
dayOfWeek = (day as Dayjs).day();
705+
} else {
706+
// date-fns: 0 (Sunday) to 6 (Saturday)
707+
dayOfWeek = (day as Date).getDay();
708+
}
709+
692710
const isWeekend =
693-
(dateAdapter.lib === "luxon" && (dayOfWeek === 7 || dayOfWeek === 6)) ||
694-
(dateAdapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
711+
dateAdapter.lib === "luxon"
712+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
713+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
695714

696-
return isWeekend ? "Weekends are un-selectable" : false;
715+
return isWeekend ? "weekends are un-selectable" : false;
697716
};
698717
return (
699718
<Calendar

packages/lab/stories/date-picker/date-picker-range.qa.stories.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import { QAContainer, type QAContainerProps } from "docs/components";
1515
import "dayjs/locale/es";
1616
import { withDateMock } from ".storybook/decorators/withDateMock";
1717
import type { DateFrameworkType } from "@salt-ds/date-adapters";
18+
import type { Dayjs } from "dayjs";
19+
import type { DateTime } from "luxon";
20+
import type { Moment } from "moment";
1821

1922
export default {
2023
title: "Lab/Date Picker/QA",
@@ -42,7 +45,20 @@ const renderQAContainer = ({
4245
luxonOffset: number,
4346
message: string,
4447
) => {
45-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
48+
let dayOfWeek: number;
49+
if (dateAdapter.lib === "luxon") {
50+
// Luxon: 1 (Monday) to 7 (Sunday)
51+
dayOfWeek = (day as DateTime).weekday;
52+
} else if (dateAdapter.lib === "moment") {
53+
// Moment: 0 (Sunday) to 6 (Saturday)
54+
dayOfWeek = (day as Moment).day();
55+
} else if (dateAdapter.lib === "dayjs") {
56+
// Day.js: 0 (Sunday) to 6 (Saturday)
57+
dayOfWeek = (day as Dayjs).day();
58+
} else {
59+
// date-fns: 0 (Sunday) to 6 (Saturday)
60+
dayOfWeek = (day as Date).getDay();
61+
}
4662
const isTargetDay =
4763
(dateAdapter.lib === "luxon" && dayOfWeek === luxonOffset) ||
4864
(dateAdapter.lib !== "luxon" && dayOfWeek === targetDayIndex);

packages/lab/stories/date-picker/date-picker-single.qa.stories.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import { QAContainer, type QAContainerProps } from "docs/components";
1313
import "dayjs/locale/es";
1414
import { withDateMock } from ".storybook/decorators/withDateMock";
1515
import type { DateFrameworkType } from "@salt-ds/date-adapters";
16+
import type { Dayjs } from "dayjs";
17+
import type { DateTime } from "luxon";
18+
import type { Moment } from "moment/moment";
1619

1720
export default {
1821
title: "Lab/Date Picker/QA",
@@ -34,11 +37,23 @@ const renderQAContainer = (
3437
luxonOffset: number,
3538
message: string,
3639
) => {
37-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
40+
let dayOfWeek: number;
41+
if (dateAdapter.lib === "luxon") {
42+
// Luxon: 1 (Monday) to 7 (Sunday)
43+
dayOfWeek = (day as DateTime).weekday;
44+
} else if (dateAdapter.lib === "moment") {
45+
// Moment: 0 (Sunday) to 6 (Saturday)
46+
dayOfWeek = (day as Moment).day();
47+
} else if (dateAdapter.lib === "dayjs") {
48+
// Day.js: 0 (Sunday) to 6 (Saturday)
49+
dayOfWeek = (day as Dayjs).day();
50+
} else {
51+
// date-fns: 0 (Sunday) to 6 (Saturday)
52+
dayOfWeek = (day as Date).getDay();
53+
}
3854
const isTargetDay =
3955
(dateAdapter.lib === "luxon" && dayOfWeek === luxonOffset) ||
4056
(dateAdapter.lib !== "luxon" && dayOfWeek === targetDayIndex);
41-
4257
return isTargetDay ? message : false;
4358
};
4459

packages/lab/stories/date-picker/date-picker.stories.tsx

Lines changed: 87 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ import "dayjs/locale/zh-cn";
7171
import { es as dateFnsEs, zhCN as dateFnsZhCn } from "date-fns/locale";
7272
import "./date-picker.stories.css";
7373
import { withDateMock } from ".storybook/decorators/withDateMock";
74+
import type { Dayjs } from "dayjs";
75+
import type { DateTime } from "luxon";
76+
import type { Moment } from "moment/moment";
7477

7578
export default {
7679
title: "Lab/Date Picker",
@@ -2074,13 +2077,29 @@ export const SingleWithUnselectableDates: StoryFn<DatePickerSingleProps> = ({
20742077
[args?.onSelectionChange, dateAdapter],
20752078
);
20762079

2077-
const isDayUnselectable = (day: ReturnType<typeof dateAdapter.date>) => {
2078-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
2080+
const isDayUnselectable = (day: DateFrameworkType) => {
2081+
let dayOfWeek: number;
2082+
2083+
if (dateAdapter.lib === "luxon") {
2084+
// Luxon: 1 (Monday) to 7 (Sunday)
2085+
dayOfWeek = (day as DateTime).weekday;
2086+
} else if (dateAdapter.lib === "moment") {
2087+
// Moment: 0 (Sunday) to 6 (Saturday)
2088+
dayOfWeek = (day as Moment).day();
2089+
} else if (dateAdapter.lib === "dayjs") {
2090+
// Day.js: 0 (Sunday) to 6 (Saturday)
2091+
dayOfWeek = (day as Dayjs).day();
2092+
} else {
2093+
// date-fns: 0 (Sunday) to 6 (Saturday)
2094+
dayOfWeek = (day as Date).getDay();
2095+
}
2096+
20792097
const isWeekend =
2080-
(dateAdapter.lib === "luxon" && (dayOfWeek === 7 || dayOfWeek === 6)) ||
2081-
(dateAdapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
2098+
dateAdapter.lib === "luxon"
2099+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
2100+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
20822101

2083-
return isWeekend ? "Weekends are un-selectable" : false;
2102+
return isWeekend ? "weekends are un-selectable" : false;
20842103
};
20852104

20862105
const labelId = useId();
@@ -2173,13 +2192,29 @@ export const RangeWithUnselectableDates: StoryFn<DatePickerRangeProps> = ({
21732192
[args?.onSelectionChange, dateAdapter],
21742193
);
21752194

2176-
const isDayUnselectable = (day: ReturnType<typeof dateAdapter.date>) => {
2177-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
2195+
const isDayUnselectable = (day: DateFrameworkType) => {
2196+
let dayOfWeek: number;
2197+
2198+
if (dateAdapter.lib === "luxon") {
2199+
// Luxon: 1 (Monday) to 7 (Sunday)
2200+
dayOfWeek = (day as DateTime).weekday;
2201+
} else if (dateAdapter.lib === "moment") {
2202+
// Moment: 0 (Sunday) to 6 (Saturday)
2203+
dayOfWeek = (day as Moment).day();
2204+
} else if (dateAdapter.lib === "dayjs") {
2205+
// Day.js: 0 (Sunday) to 6 (Saturday)
2206+
dayOfWeek = (day as Dayjs).day();
2207+
} else {
2208+
// date-fns: 0 (Sunday) to 6 (Saturday)
2209+
dayOfWeek = (day as Date).getDay();
2210+
}
2211+
21782212
const isWeekend =
2179-
(dateAdapter.lib === "luxon" && (dayOfWeek === 7 || dayOfWeek === 6)) ||
2180-
(dateAdapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
2213+
dateAdapter.lib === "luxon"
2214+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
2215+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
21812216

2182-
return isWeekend ? "Weekends are un-selectable" : false;
2217+
return isWeekend ? "weekends are un-selectable" : false;
21832218
};
21842219

21852220
const labelId = useId();
@@ -2249,13 +2284,29 @@ export const SingleWithHighlightedDates: StoryFn<DatePickerSingleProps> = ({
22492284
[args?.onSelectionChange, dateAdapter],
22502285
);
22512286

2252-
const isDayHighlighted = (day: ReturnType<typeof dateAdapter.date>) => {
2253-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
2287+
const isDayHighlighted = (day: DateFrameworkType) => {
2288+
let dayOfWeek: number;
2289+
2290+
if (dateAdapter.lib === "luxon") {
2291+
// Luxon: 1 (Monday) to 7 (Sunday)
2292+
dayOfWeek = (day as DateTime).weekday;
2293+
} else if (dateAdapter.lib === "moment") {
2294+
// Moment: 0 (Sunday) to 6 (Saturday)
2295+
dayOfWeek = (day as Moment).day();
2296+
} else if (dateAdapter.lib === "dayjs") {
2297+
// Day.js: 0 (Sunday) to 6 (Saturday)
2298+
dayOfWeek = (day as Dayjs).day();
2299+
} else {
2300+
// date-fns: 0 (Sunday) to 6 (Saturday)
2301+
dayOfWeek = (day as Date).getDay();
2302+
}
2303+
22542304
const isWeekend =
2255-
(dateAdapter.lib === "luxon" && (dayOfWeek === 7 || dayOfWeek === 6)) ||
2256-
(dateAdapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
2305+
dateAdapter.lib === "luxon"
2306+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
2307+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
22572308

2258-
return isWeekend ? "Weekends are highlighted" : false;
2309+
return isWeekend ? "weekends are highlighted" : false;
22592310
};
22602311

22612312
const labelId = useId();
@@ -2348,13 +2399,29 @@ export const RangeWithHighlightedDates: StoryFn<DatePickerRangeProps> = ({
23482399
[args?.onSelectionChange, dateAdapter],
23492400
);
23502401

2351-
const isDayHighlighted = (day: ReturnType<typeof dateAdapter.date>) => {
2352-
const dayOfWeek = dateAdapter.getDayOfWeek(day);
2402+
const isDayHighlighted = (day: DateFrameworkType) => {
2403+
let dayOfWeek: number;
2404+
2405+
if (dateAdapter.lib === "luxon") {
2406+
// Luxon: 1 (Monday) to 7 (Sunday)
2407+
dayOfWeek = (day as DateTime).weekday;
2408+
} else if (dateAdapter.lib === "moment") {
2409+
// Moment: 0 (Sunday) to 6 (Saturday)
2410+
dayOfWeek = (day as Moment).day();
2411+
} else if (dateAdapter.lib === "dayjs") {
2412+
// Day.js: 0 (Sunday) to 6 (Saturday)
2413+
dayOfWeek = (day as Dayjs).day();
2414+
} else {
2415+
// date-fns: 0 (Sunday) to 6 (Saturday)
2416+
dayOfWeek = (day as Date).getDay();
2417+
}
2418+
23532419
const isWeekend =
2354-
(dateAdapter.lib === "luxon" && (dayOfWeek === 7 || dayOfWeek === 6)) ||
2355-
(dateAdapter.lib !== "luxon" && (dayOfWeek === 0 || dayOfWeek === 6));
2420+
dateAdapter.lib === "luxon"
2421+
? dayOfWeek === 6 || dayOfWeek === 7 // Saturday or Sunday
2422+
: dayOfWeek === 0 || dayOfWeek === 6; // Sunday or Saturday
23562423

2357-
return isWeekend ? "Weekends are highlighted" : false;
2424+
return isWeekend ? "weekends are highlighted" : false;
23582425
};
23592426

23602427
const labelId = useId();

0 commit comments

Comments
 (0)