Skip to content

Commit 734dd56

Browse files
Bertha Cornishclaude
authored andcommitted
fix: resolve TS2802 Set iteration error and apply biome formatting
Replace `[...new Set()]` with `Array.from(new Set())` in UserRepository.findByEmails to fix TypeScript downlevelIteration compilation error. Also applies biome auto-formatting (import ordering, line wrapping) across changed files. https://claude.ai/code/session_01P7vSb25vbhtTxChmTMQsew
1 parent 25061e9 commit 734dd56

File tree

8 files changed

+22
-38
lines changed

8 files changed

+22
-38
lines changed

apps/web/modules/schedules/hooks/useEvent.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import { shallow } from "zustand/shallow";
2-
31
import { useBookerStoreContext } from "@calcom/features/bookings/Booker/BookerStoreProvider";
4-
import { useSchedule } from "@calcom/web/modules/schedules/hooks/useSchedule";
5-
import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams";
6-
import { trpc } from "@calcom/trpc/react";
7-
82
import { useBookerTime } from "@calcom/features/bookings/Booker/hooks/useBookerTime";
93
import { useStableTimezone } from "@calcom/features/bookings/Booker/hooks/useStableTimezone";
4+
import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams";
5+
import { trpc } from "@calcom/trpc/react";
6+
import { useSchedule } from "@calcom/web/modules/schedules/hooks/useSchedule";
7+
import { shallow } from "zustand/shallow";
108

119
export type useEventReturnType = ReturnType<typeof useEvent>;
1210
export type useScheduleForEventReturnType = ReturnType<typeof useScheduleForEvent>;

apps/web/modules/schedules/hooks/useSchedule.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { useSearchParams } from "next/navigation";
2-
31
import { updateEmbedBookerState } from "@calcom/embed-core/src/embed-iframe";
42
import { sdkActionManager } from "@calcom/embed-core/src/sdk-event";
53
import { useBookerStore } from "@calcom/features/bookings/Booker/store";
@@ -9,7 +7,7 @@ import { useTimesForSchedule } from "@calcom/features/schedules/hooks/useTimesFo
97
import { getRoutedTeamMemberIdsFromSearchParams } from "@calcom/lib/bookings/getRoutedTeamMemberIdsFromSearchParams";
108
import { PUBLIC_QUERY_AVAILABLE_SLOTS_INTERVAL_SECONDS } from "@calcom/lib/constants";
119
import { trpc } from "@calcom/trpc/react";
12-
10+
import { useSearchParams } from "next/navigation";
1311
import { useApiV2AvailableSlots } from "./useApiV2AvailableSlots";
1412

1513
export type UseScheduleWithCacheArgs = {

packages/features/availability/lib/getUserAvailability.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -618,14 +618,12 @@ export class UserAvailabilityService {
618618
};
619619
}
620620

621-
const guestBusyTimesFormatted: EventBusyDetails[] = (initialData?.guestBusyTimes ?? []).map(
622-
(t) => ({
623-
start: dayjs.utc(t.start).toISOString(),
624-
end: dayjs.utc(t.end).toISOString(),
625-
title: "Guest busy",
626-
source: withSource ? "guest-availability" : "",
627-
})
628-
);
621+
const guestBusyTimesFormatted: EventBusyDetails[] = (initialData?.guestBusyTimes ?? []).map((t) => ({
622+
start: dayjs.utc(t.start).toISOString(),
623+
end: dayjs.utc(t.end).toISOString(),
624+
title: "Guest busy",
625+
source: withSource ? "guest-availability" : "",
626+
}));
629627

630628
const detailedBusyTimesWithSource: EventBusyDetails[] = [
631629
...busyTimes.map((a) => ({

packages/features/users/repositories/UserRepository.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { UserRepository } from "@calcom/features/users/repositories/UserReposito
33
import type { PrismaClient } from "@calcom/prisma";
44
import { CreationSource } from "@calcom/prisma/enums";
55
import { beforeEach, describe, expect, test, vi } from "vitest";
6+
67
vi.mock("@calcom/app-store/delegationCredential", () => ({
78
enrichHostsWithDelegationCredentials: vi.fn(),
89
getUsersCredentialsIncludeServiceAccountKey: vi.fn(),

packages/features/users/repositories/UserRepository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1519,7 +1519,7 @@ export class UserRepository {
15191519
async findByEmails({ emails }: { emails: string[] }) {
15201520
if (!emails.length) return [];
15211521

1522-
const normalized = [...new Set(emails.map((e) => e.toLowerCase()))];
1522+
const normalized = Array.from(new Set(emails.map((e) => e.toLowerCase())));
15231523

15241524
const [byPrimary, bySecondary] = await Promise.all([
15251525
this.prismaClient.user.findMany({

packages/trpc/server/routers/viewer/slots/getGuestBusyTimesForReschedule.test.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -360,15 +360,10 @@ describe("AvailableSlotsService - _getGuestBusyTimesForReschedule", () => {
360360
mockDependencies.bookingRepo.findByUidIncludeAttendeeEmails.mockResolvedValue({
361361
id: 1,
362362
uid: rescheduleUid,
363-
attendees: [
364-
{ email: "caluser@cal.com" },
365-
{ email: "external@gmail.com" },
366-
],
363+
attendees: [{ email: "caluser@cal.com" }, { email: "external@gmail.com" }],
367364
user: { email: hostEmail },
368365
});
369-
mockDependencies.userRepo.findByEmails.mockResolvedValue([
370-
{ id: 10, email: "caluser@cal.com" },
371-
]);
366+
mockDependencies.userRepo.findByEmails.mockResolvedValue([{ id: 10, email: "caluser@cal.com" }]);
372367
mockDependencies.bookingRepo.findByUserIdsAndDateRange.mockResolvedValue([]);
373368

374369
await callGetGuestBusyTimes({
@@ -470,9 +465,7 @@ describe("AvailableSlotsService - _getGuestBusyTimesForReschedule", () => {
470465
attendees: [{ email: "cal-user@example.com" }, { email: "external@gmail.com" }],
471466
user: { email: hostEmail },
472467
});
473-
mockDependencies.userRepo.findByEmails.mockResolvedValue([
474-
{ id: 42, email: "cal-user@example.com" },
475-
]);
468+
mockDependencies.userRepo.findByEmails.mockResolvedValue([{ id: 42, email: "cal-user@example.com" }]);
476469
mockDependencies.bookingRepo.findByUserIdsAndDateRange.mockResolvedValue([]);
477470

478471
await callGetGuestBusyTimes({

packages/trpc/server/routers/viewer/slots/types.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type { IncomingMessage } from "node:http";
2-
import { z } from "zod";
3-
42
import { timeZoneSchema } from "@calcom/lib/dayjs/timeZone.schema";
3+
import { z } from "zod";
54

65
const isValidDateString = (val: string) => !isNaN(Date.parse(val));
76

packages/trpc/server/routers/viewer/slots/util.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@ import type {
99
GetAvailabilityUser,
1010
UserAvailabilityService,
1111
} from "@calcom/features/availability/lib/getUserAvailability";
12+
import type { IGetAvailableSlots } from "@calcom/features/bookings/Booker/hooks/useAvailableTimeSlots";
1213
import type { CheckBookingLimitsService } from "@calcom/features/bookings/lib/checkBookingLimits";
1314
import { checkForConflicts } from "@calcom/features/bookings/lib/conflictChecker/checkForConflicts";
1415
import type { QualifiedHostsService } from "@calcom/features/bookings/lib/host-filtering/findQualifiedHostsWithDelegationCredentials";
1516
import { isEventTypeLoggingEnabled } from "@calcom/features/bookings/lib/isEventTypeLoggingEnabled";
1617
import type { BookingRepository } from "@calcom/features/bookings/repositories/BookingRepository";
1718
import type { BusyTimesService } from "@calcom/features/busyTimes/services/getBusyTimes";
1819
import type { getBusyTimesService } from "@calcom/features/di/containers/BusyTimes";
20+
import type { OrgMembershipLookup } from "@calcom/features/di/modules/OrgMembershipLookup";
1921
import type { TeamRepository } from "@calcom/features/ee/teams/repositories/TeamRepository";
2022
import { getDefaultEvent } from "@calcom/features/eventtypes/lib/defaultEvents";
2123
import type { EventTypeRepository } from "@calcom/features/eventtypes/repositories/eventTypeRepository";
2224
import type { FeaturesRepository } from "@calcom/features/flags/features.repository";
2325
import type { PrismaOOORepository } from "@calcom/features/ooo/repositories/PrismaOOORepository";
2426
import type { IRedisService } from "@calcom/features/redis/IRedisService";
27+
import type { RoutingFormResponseRepository } from "@calcom/features/routing-forms/repositories/RoutingFormResponseRepository";
2528
import { buildDateRanges } from "@calcom/features/schedules/lib/date-ranges";
2629
import getSlots from "@calcom/features/schedules/lib/slots";
2730
import type { ScheduleRepository } from "@calcom/features/schedules/repositories/ScheduleRepository";
@@ -48,7 +51,6 @@ import {
4851
import logger from "@calcom/lib/logger";
4952
import { safeStringify } from "@calcom/lib/safeStringify";
5053
import { withReporting } from "@calcom/lib/sentryWrapper";
51-
import type { RoutingFormResponseRepository } from "@calcom/features/routing-forms/repositories/RoutingFormResponseRepository";
5254
import { PeriodType, SchedulingType } from "@calcom/prisma/enums";
5355
import type { CalendarFetchMode, EventBusyDate, EventBusyDetails } from "@calcom/types/Calendar";
5456
import type { CredentialForCalendarService } from "@calcom/types/Credential";
@@ -57,8 +59,6 @@ import type { Logger } from "tslog";
5759
import { v4 as uuid } from "uuid";
5860
import type { TGetScheduleInputSchema } from "./getSchedule.schema";
5961
import type { GetScheduleOptions } from "./types";
60-
import type { OrgMembershipLookup } from "@calcom/features/di/modules/OrgMembershipLookup";
61-
import type { IGetAvailableSlots } from "@calcom/features/bookings/Booker/hooks/useAvailableTimeSlots";
6262

6363
const log = logger.getSubLogger({ prefix: ["[slots/util]"] });
6464
const DEFAULT_SLOTS_CACHE_TTL = 2000;
@@ -861,16 +861,13 @@ export class AvailableSlotsService {
861861
// without being constrained by other guests' schedules.
862862
if (rescheduledBy) {
863863
const hostEmail = original.user?.email;
864-
const isHostReschedule =
865-
hostEmail && rescheduledBy.toLowerCase() === hostEmail.toLowerCase();
864+
const isHostReschedule = hostEmail && rescheduledBy.toLowerCase() === hostEmail.toLowerCase();
866865
if (!isHostReschedule) {
867866
return [];
868867
}
869868
}
870869

871-
const emails = original.attendees
872-
.map((a) => a.email)
873-
.filter((e): e is string => Boolean(e));
870+
const emails = original.attendees.map((a) => a.email).filter((e): e is string => Boolean(e));
874871
if (!emails.length) return [];
875872

876873
const calUsers = await this.dependencies.userRepo.findByEmails({ emails });

0 commit comments

Comments
 (0)