diff --git a/packages/features/insights/hooks/useInsightsBookings.ts b/packages/features/insights/hooks/useInsightsBookings.ts index d087b1d6e0..e105c3cd33 100644 --- a/packages/features/insights/hooks/useInsightsBookings.ts +++ b/packages/features/insights/hooks/useInsightsBookings.ts @@ -35,7 +35,7 @@ export const useInsightsBookings = () => { size: 200, meta: { filter: { - type: ColumnFilterType.SINGLE_SELECT, + type: ColumnFilterType.MULTI_SELECT, }, }, enableColumnFilter: true, diff --git a/packages/lib/server/service/InsightsBookingBaseService.ts b/packages/lib/server/service/InsightsBookingBaseService.ts index 180c19950d..7e669b5ad8 100644 --- a/packages/lib/server/service/InsightsBookingBaseService.ts +++ b/packages/lib/server/service/InsightsBookingBaseService.ts @@ -298,8 +298,16 @@ export class InsightsBookingBaseService { return null; } - if (id === "eventTypeId" && isSingleSelectFilterValue(value) && typeof value.data === "number") { - return Prisma.sql`("eventTypeId" = ${value.data}) OR ("eventParentId" = ${value.data})`; + if (id === "eventTypeId" && isMultiSelectFilterValue(value)) { + const eventTypeIds = value.data.map((id) => Number(id)); + + if (eventTypeIds.length === 0) { + return null; + } + + return Prisma.sql`("eventTypeId" IN (${Prisma.join(eventTypeIds)}) OR "eventParentId" IN (${Prisma.join( + eventTypeIds + )}))`; } if (id === "userId" && isSingleSelectFilterValue(value) && typeof value.data === "number") { diff --git a/packages/lib/server/service/__tests__/InsightsBookingService.integration-test.ts b/packages/lib/server/service/__tests__/InsightsBookingService.integration-test.ts index 8c45f0d927..a16d562a8f 100644 --- a/packages/lib/server/service/__tests__/InsightsBookingService.integration-test.ts +++ b/packages/lib/server/service/__tests__/InsightsBookingService.integration-test.ts @@ -381,8 +381,8 @@ describe("InsightsBookingService Integration Tests", () => { { id: "eventTypeId", value: { - type: ColumnFilterType.SINGLE_SELECT, - data: testData.eventType.id, + type: ColumnFilterType.MULTI_SELECT, + data: [testData.eventType.id], }, }, ], @@ -391,7 +391,9 @@ describe("InsightsBookingService Integration Tests", () => { const conditions = await service.getFilterConditions(); expect(conditions).toEqual( - Prisma.sql`("eventTypeId" = ${testData.eventType.id}) OR ("eventParentId" = ${testData.eventType.id})` + Prisma.sql`("eventTypeId" IN (${Prisma.join([ + testData.eventType.id, + ])}) OR "eventParentId" IN (${Prisma.join([testData.eventType.id])}))` ); await testData.cleanup(); @@ -441,8 +443,8 @@ describe("InsightsBookingService Integration Tests", () => { { id: "eventTypeId", value: { - type: ColumnFilterType.SINGLE_SELECT, - data: testData.eventType.id, + type: ColumnFilterType.MULTI_SELECT, + data: [testData.eventType.id], }, }, { @@ -458,7 +460,11 @@ describe("InsightsBookingService Integration Tests", () => { const conditions = await service.getFilterConditions(); expect(conditions).toEqual( - Prisma.sql`(("eventTypeId" = ${testData.eventType.id}) OR ("eventParentId" = ${testData.eventType.id})) AND ("userId" = ${testData.user.id})` + Prisma.sql`(("eventTypeId" IN (${Prisma.join([ + testData.eventType.id, + ])}) OR "eventParentId" IN (${Prisma.join([testData.eventType.id])}))) AND ("userId" = ${ + testData.user.id + })` ); await testData.cleanup(); @@ -542,8 +548,8 @@ describe("InsightsBookingService Integration Tests", () => { { id: "eventTypeId", value: { - type: ColumnFilterType.SINGLE_SELECT, - data: userEventType.id, + type: ColumnFilterType.MULTI_SELECT, + data: [userEventType.id], }, }, ],