Skip to content

Commit d4f3726

Browse files
CarinaWolliCarinaWolli
and
CarinaWolli
authored
fix: missing date overrides in negative tz (#15251)
* fix check for past date overrides * add test --------- Co-authored-by: CarinaWolli <wollencarina@gmail.com>
1 parent 817a3de commit d4f3726

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

apps/web/playwright/availability.e2e.ts

+23
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,29 @@ test.describe("Availablity", () => {
8888
await expect(await page.getByTitle(deleteButtonTitle).isVisible()).toBe(false);
8989
});
9090

91+
test("Can create date override on current day in a negative timezone", async ({ page }) => {
92+
await page.getByTestId("schedules").first().click();
93+
// set time zone to New York
94+
await page
95+
.locator("#availability-form div")
96+
.filter({ hasText: "TimezoneEurope/London" })
97+
.locator("svg")
98+
.click();
99+
await page.locator("[id=timeZone-lg-viewport]").fill("New");
100+
await page.getByTestId("select-option-America/New_York").click();
101+
102+
// Add override for today
103+
await page.getByTestId("add-override").click();
104+
await page.locator('[id="modal-title"]').waitFor();
105+
await page.locator('[data-testid="day"][data-disabled="false"]').first().click();
106+
await page.getByTestId("add-override-submit-btn").click();
107+
await page.getByTestId("dialog-rejection").click();
108+
109+
await page.locator('[form="availability-form"][type="submit"]').click();
110+
await page.reload();
111+
await expect(page.locator('[data-testid="date-overrides-list"] > li')).toHaveCount(1);
112+
});
113+
91114
test("Schedule listing", async ({ page }) => {
92115
await test.step("Can add a new schedule", async () => {
93116
await page.getByTestId("new-schedule").click();

packages/features/timezone-buddy/components/AvailabilityEditSheet.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export function AvailabilityEditSheetForm(props: Props & { data: Data; isPending
194194
id="timezone"
195195
isDisabled={!hasEditPermission || !data.hasDefaultSchedule}
196196
value={watchTimezone ?? "Europe/London"}
197+
data-testid="timezone-select"
197198
onChange={(event) => {
198199
if (event) form.setValue("timeZone", event.value, { shouldDirty: true });
199200
}}

packages/lib/schedules/client/transformers.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,11 @@ export function transformAvailabilityForClient(schedule: ScheduleWithAvailabilit
3737

3838
export function transformDateOverridesForClient(schedule: ScheduleWithAvailabilities, timeZone: string) {
3939
return schedule.availability.reduce((acc, override) => {
40-
// only iff future date override
41-
if (!override.date || dayjs.tz(override.date, timeZone).isBefore(dayjs(), "day")) {
40+
// only if future date override
41+
const currentUtcOffset = dayjs().tz(timeZone).utcOffset();
42+
const currentTimeInTz = dayjs().utc().add(currentUtcOffset, "minute");
43+
44+
if (!override.date || dayjs(override.date).isBefore(currentTimeInTz, "day")) {
4245
return acc;
4346
}
4447
const newValue = {

0 commit comments

Comments
 (0)