Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
import { useSession } from "next-auth/react";
import { useState, useMemo } from "react";

import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner";
import { useDataTable } from "@calcom/features/data-table/hooks";
import type {
CombinedFilterSegment,
FilterSegmentOutput,
SystemFilterSegmentInternal,
UserFilterSegment,
} from "@calcom/features/data-table/lib/types";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button } from "@calcom/ui/components/button";
import {
Dropdown,
DropdownItem,
DropdownMenuPortal,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
DropdownMenuLabel,
DropdownMenuPortal,
DropdownMenuTrigger,
} from "@calcom/ui/components/dropdown";
import { Icon, type IconName } from "@calcom/ui/components/icon";

import { useDataTable } from "@calcom/features/data-table/hooks";
import type {
FilterSegmentOutput,
CombinedFilterSegment,
SystemFilterSegmentInternal,
UserFilterSegment,
} from "@calcom/features/data-table/lib/types";
import { useSession } from "next-auth/react";
import { useMemo, useState } from "react";
import { DeleteSegmentDialog } from "./DeleteSegmentDialog";
import { DuplicateSegmentDialog } from "./DuplicateSegmentDialog";
import { RenameSegmentDialog } from "./RenameSegmentDialog";
Expand All @@ -43,7 +41,7 @@ export function FilterSegmentSelect({ shortLabel }: Props = {}) {
const { t } = useLocale();
const session = useSession();
const isAdminOrOwner = checkAdminOrOwner(session.data?.user?.org?.role);
const { segments, selectedSegment, segmentId, setSegmentId, isSegmentEnabled } = useDataTable();
const { segments, selectedSegment, segmentId, setSegmentId, isSegmentEnabled, clearAll } = useDataTable();
const [segmentToRename, setSegmentToRename] = useState<FilterSegmentOutput | undefined>();
const [segmentToDuplicate, setSegmentToDuplicate] = useState<CombinedFilterSegment | undefined>();
const [segmentToDelete, setSegmentToDelete] = useState<FilterSegmentOutput | undefined>();
Expand Down Expand Up @@ -192,7 +190,7 @@ export function FilterSegmentSelect({ shortLabel }: Props = {}) {
segment={segment}
onSelect={() => {
if (segmentId && segmentId.type === segment.type && segmentId.id === segment.id) {
setSegmentId(null);
clearAll();
} else {
if (segment.type === "system") {
setSegmentId({ id: segment.id, type: "system" });
Expand Down Expand Up @@ -247,9 +245,7 @@ function DropdownItemWithSubmenu({
const [isOpen, setIsOpen] = useState(false);

return (
<DropdownMenuItem
className="cursor-pointer rounded-lg last-of-type:rounded-b-lg"
onSelect={onSelect}>
<DropdownMenuItem className="cursor-pointer rounded-lg last-of-type:rounded-b-lg" onSelect={onSelect}>
<div className="flex items-center">
{children}
<div className="grow" />
Expand Down
43 changes: 37 additions & 6 deletions apps/web/playwright/filter-segment.e2e.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import { expect } from "@playwright/test";

import { MembershipRole } from "@calcom/prisma/enums";
import { expect } from "@playwright/test";

import {
applySelectFilter,
clearFilters,
createFilterSegment,
selectSegment,
deleteSegment,
expectSegmentCleared,
expectSegmentSelected,
getByTableColumnText,
listSegments,
clearFilters,
openSegmentSubmenu,
locateSelectedSegmentName,
getByTableColumnText,
openSegmentSubmenu,
selectSegment,
} from "./filter-helpers";
import { test } from "./lib/fixtures";

Expand Down Expand Up @@ -362,4 +363,34 @@ test.describe("Filter Segment Functionality", () => {
).toBeHidden();
});
});

test("Deselecting a segment clears all active filters", async ({ page, users }) => {
const orgOwner = await users.create(undefined, {
hasTeam: true,
isOrg: true,
});
const { team: org } = await orgOwner.getOrgMembership();

await orgOwner.apiLogin();
await page.goto(`/settings/organizations/${org.slug}/members`);

const dataTable = page.getByTestId("user-list-data-table").first();
await expect(dataTable).toBeVisible();

await applySelectFilter(page, "role", "admin");
const segmentName = "Test Deselect Segment";
await createFilterSegment(page, segmentName);

await expectSegmentSelected(page, segmentName);
const urlWithSegment = page.url();
expect(urlWithSegment).toContain("activeFilters");

await selectSegment(page, segmentName);
await expectSegmentCleared(page);

const urlAfterDeselect = page.url();
expect(urlAfterDeselect).not.toContain("activeFilters");

await deleteSegment(page, segmentName);
});
});
4 changes: 2 additions & 2 deletions apps/web/playwright/system-segments.e2e.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { expect } from "@playwright/test";
import type { Page } from "@playwright/test";
import { expect } from "@playwright/test";

import { addFilter, selectSegment, expectSegmentCleared, expectSegmentSelected } from "./filter-helpers";
import { addFilter, expectSegmentCleared, expectSegmentSelected, selectSegment } from "./filter-helpers";
import { test } from "./lib/fixtures";

test.describe.configure({ mode: "parallel" });
Expand Down
Loading