Skip to content

Commit

Permalink
feat: Add Eastern and Eastern Pacific time zones #16880 (#16974)
Browse files Browse the repository at this point in the history
* add eastern and eastern pacific timezones

* fixed issue while running tests.

* fix: Find Braz..il instead of Brasil

---------

Co-authored-by: Alex van Andel <me@alexvanandel.com>
  • Loading branch information
ShreyTanna29 and emrysal authored Oct 10, 2024
1 parent 711bec8 commit b1cd3e9
Show file tree
Hide file tree
Showing 5 changed files with 181 additions and 28 deletions.
2 changes: 1 addition & 1 deletion apps/web/playwright/availability.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ test.describe("Availablity", () => {
.locator("svg")
.click();

await page.locator("[id=timeZone-lg-viewport]").fill("bras");
await page.locator("[id=timeZone-lg-viewport]").fill("Braz");
await page.getByTestId("select-option-America/Sao_Paulo").click();
await submitAndWaitForResponse(page, "/api/trpc/availability/schedule.update?batch=1");
await page.getByTestId("add-override").click();
Expand Down
127 changes: 100 additions & 27 deletions apps/web/test/lib/getTimezone.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,66 @@ const cityData = [
city: "San Francisco",
timezone: "America/Los_Angeles",
},
{
city: "Eastern Time - US & Canada",
timezone: "America/New_York",
},
{
city: "Pacific Time - US & Canada",
timezone: "America/Los_Angeles",
},
{
city: "Central Time - US & Canada",
timezone: "America/Chicago",
},
{
city: "Mountain Time - US & Canada",
timezone: "America/Denver",
},
{
city: "Atlantic Time - Canada",
timezone: "America/Halifax",
},
{
city: "Eastern European Time",
timezone: "Europe/Bucharest",
},
{
city: "Central European Time",
timezone: "Europe/Berlin",
},
{
city: "Western European Time",
timezone: "Europe/London",
},
{
city: "Australian Eastern Time",
timezone: "Australia/Sydney",
},
{
city: "Japan Standard Time",
timezone: "Asia/Tokyo",
},
{
city: "India Standard Time",
timezone: "Asia/Kolkata",
},
{
city: "Gulf Standard Time",
timezone: "Asia/Dubai",
},
{
city: "South Africa Standard Time",
timezone: "Africa/Johannesburg",
},
{
city: "Brazil Time",
timezone: "America/Sao_Paulo",
},
{
city: "Hawaii-Aleutian Standard Time",
timezone: "Pacific/Honolulu",
},
];

const option = {
Expand All @@ -49,37 +109,50 @@ describe("getTimezone", () => {

it("should filter cities for a valid city name", () => {
expect(filterByCities("San Francisco", cityData)).toMatchInlineSnapshot(`
[
{
"city": "San Francisco",
"timezone": "America/Argentina/Cordoba",
},
{
"city": "San Francisco de Macoris",
"timezone": "America/Santo_Domingo",
},
{
"city": "San Francisco Gotera",
"timezone": "America/El_Salvador",
},
{
"city": "San Francisco",
"timezone": "America/Los_Angeles",
},
]
`);
[
{
"city": "San Francisco",
"timezone": "America/Argentina/Cordoba",
},
{
"city": "San Francisco de Macoris",
"timezone": "America/Santo_Domingo",
},
{
"city": "San Francisco Gotera",
"timezone": "America/El_Salvador",
},
{
"city": "San Francisco",
"timezone": "America/Los_Angeles",
},
]
`);
});

it("should return appropriate timezone(s) for a given city name array", () => {
expect(addCitiesToDropdown(cityData)).toMatchInlineSnapshot(`
{
"America/Argentina/Cordoba": "San Francisco",
"America/El_Salvador": "San Francisco Gotera",
"America/Los_Angeles": "San Francisco",
"America/Santo_Domingo": "San Francisco de Macoris",
"America/Sao_Paulo": "Sao Francisco do Sul",
}
`);
{
"Africa/Johannesburg": "South Africa Standard Time",
"America/Argentina/Cordoba": "San Francisco",
"America/Chicago": "Central Time - US & Canada",
"America/Denver": "Mountain Time - US & Canada",
"America/El_Salvador": "San Francisco Gotera",
"America/Halifax": "Atlantic Time - Canada",
"America/Los_Angeles": "Pacific Time - US & Canada",
"America/New_York": "Eastern Time - US & Canada",
"America/Santo_Domingo": "San Francisco de Macoris",
"America/Sao_Paulo": "Brazil Time",
"Asia/Dubai": "Gulf Standard Time",
"Asia/Kolkata": "India Standard Time",
"Asia/Tokyo": "Japan Standard Time",
"Australia/Sydney": "Australian Eastern Time",
"Europe/Berlin": "Central European Time",
"Europe/Bucharest": "Eastern European Time",
"Europe/London": "Western European Time",
"Pacific/Honolulu": "Hawaii-Aleutian Standard Time",
}
`);
});

it("should render city name as option label if cityData is not empty", () => {
Expand Down
64 changes: 64 additions & 0 deletions packages/features/additionalTimezones/additionalTimezones.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"timezones": [
{
"name": "Eastern Time - US & Canada",
"identifier": "America/New_York"
},
{
"name": "Pacific Time - US & Canada",
"identifier": "America/Los_Angeles"
},
{
"name": "Central Time - US & Canada",
"identifier": "America/Chicago"
},
{
"name": "Mountain Time - US & Canada",
"identifier": "America/Denver"
},
{
"name": "Atlantic Time - Canada",
"identifier": "America/Halifax"
},
{
"name": "Eastern European Time",
"identifier": "Europe/Bucharest"
},
{
"name": "Central European Time",
"identifier": "Europe/Berlin"
},
{
"name": "Western European Time",
"identifier": "Europe/London"
},
{
"name": "Australian Eastern Time",
"identifier": "Australia/Sydney"
},
{
"name": "Japan Standard Time",
"identifier": "Asia/Tokyo"
},
{
"name": "India Standard Time",
"identifier": "Asia/Kolkata"
},
{
"name": "Gulf Standard Time",
"identifier": "Asia/Dubai"
},
{
"name": "South Africa Standard Time",
"identifier": "Africa/Johannesburg"
},
{
"name": "Brazil Time",
"identifier": "America/Sao_Paulo"
},
{
"name": "Hawaii-Aleutian Standard Time",
"identifier": "Pacific/Honolulu"
}
]
}
10 changes: 10 additions & 0 deletions packages/features/additionalTimezones/additionalTimezones.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import * as additionalTimezones from "./additionalTimezones.json";

export interface Timezone {
name: string;
identifier: string;
}

export const timezones: Timezone[] = additionalTimezones.timezones;

export default additionalTimezones;
6 changes: 6 additions & 0 deletions packages/lib/timezone.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { ITimezoneOption } from "react-timezone-select";
import dayjs from "@calcom/dayjs";
import type { ICity } from "@calcom/ui/components/form/timezone-select";

import { timezones as additionalTimezones } from "../features/additionalTimezones/additionalTimezones";
import isProblematicTimezone from "./isProblematicTimezone";

function findPartialMatch(itemsToSearch: string, searchString: string) {
Expand Down Expand Up @@ -30,6 +31,11 @@ export const addCitiesToDropdown = (cities: ICity[]) => {
}
return acc;
}, {});

additionalTimezones.forEach((tz) => {
cityTimezones[tz.identifier] = tz.name;
});

return cityTimezones || {};
};

Expand Down

0 comments on commit b1cd3e9

Please sign in to comment.