feat: multi Select for "Event Type" in Insights (#23173)
* Multi select event type in insights * Fixing multi select query generation * Added null check for eventType filters * Updated test to support multiselect * Type fix --------- Co-authored-by: Devanshu Sharma <devanshusharma658@gmail.com>
This commit is contained in:
@@ -35,7 +35,7 @@ export const useInsightsBookings = () => {
|
||||
size: 200,
|
||||
meta: {
|
||||
filter: {
|
||||
type: ColumnFilterType.SINGLE_SELECT,
|
||||
type: ColumnFilterType.MULTI_SELECT,
|
||||
},
|
||||
},
|
||||
enableColumnFilter: true,
|
||||
|
||||
@@ -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") {
|
||||
|
||||
@@ -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],
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user