Skip to content

Commit 8f82e78

Browse files
romitg2kart1ka
andauthored
fix: loading skeleton is rendered even when no attributes filter is selected (calcom#23656)
* fix * fix tests * fix tests * test fidx * chore --------- Co-authored-by: Kartik Saini <41051387+kart1ka@users.noreply.github.com>
1 parent 34d2a13 commit 8f82e78

2 files changed

Lines changed: 52 additions & 21 deletions

File tree

packages/features/Segment.test.tsx

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { render, screen, waitFor } from "@testing-library/react";
2+
import React from "react";
23
import { describe, expect, it, vi, beforeEach } from "vitest";
34
import type { Mock } from "vitest";
45

@@ -49,9 +50,10 @@ const mockAttributesWithSingleSelect = () => {
4950
slug: "department",
5051
name: "Department",
5152
type: AttributeType.SINGLE_SELECT,
53+
isWeightsEnabled: false,
5254
options: [
53-
{ id: "1", value: "Sales", slug: "sales" },
54-
{ id: "2", value: "Engineering", slug: "engineering" },
55+
{ id: "1", value: "Sales", slug: "sales", contains: [], isGroup: false },
56+
{ id: "2", value: "Engineering", slug: "engineering", contains: [], isGroup: false },
5557
],
5658
},
5759
],
@@ -85,9 +87,24 @@ vi.mock("@calcom/lib/hooks/useLocale", () => ({
8587
}));
8688

8789
describe("Segment", () => {
90+
const defaultQueryValue = {
91+
id: "root",
92+
type: "group",
93+
children1: {
94+
"rule-1": {
95+
type: "rule",
96+
properties: {
97+
field: "department",
98+
operator: "select_equals",
99+
value: ["Sales"],
100+
},
101+
},
102+
},
103+
} as AttributesQueryValue;
104+
88105
const defaultProps = {
89106
teamId: 1,
90-
queryValue: null as AttributesQueryValue | null,
107+
queryValue: defaultQueryValue,
91108
onQueryValueChange: vi.fn(),
92109
className: "test-class",
93110
};
@@ -132,7 +149,25 @@ describe("Segment", () => {
132149
});
133150
});
134151

135-
it("shows matching team members when query value is provided", async () => {
152+
it("shows no filter selected message when empty query value is provided", async () => {
153+
mockGetMatchingTeamMembers({
154+
isPending: true,
155+
data: undefined,
156+
});
157+
158+
const emptyQueryValue = {
159+
id: "root",
160+
type: "group",
161+
children1: {},
162+
} as AttributesQueryValue;
163+
164+
render(<Segment {...defaultProps} queryValue={emptyQueryValue} />);
165+
await waitFor(() => {
166+
expect(screen.getByText("no_filter_set")).toBeInTheDocument();
167+
});
168+
});
169+
170+
it("shows matching team members when valid query value is provided", async () => {
136171
mockGetMatchingTeamMembers({
137172
isPending: false,
138173
data: {
@@ -149,12 +184,7 @@ describe("Segment", () => {
149184
},
150185
});
151186

152-
const queryValue = {
153-
id: "root",
154-
type: "group",
155-
} as AttributesQueryValue;
156-
157-
render(<Segment {...defaultProps} queryValue={queryValue} />);
187+
render(<Segment {...defaultProps} queryValue={defaultQueryValue} />);
158188
await waitFor(() => {
159189
expect(screen.getByText("John Doe")).toBeInTheDocument();
160190
expect(screen.getByText("(john@example.com)")).toBeInTheDocument();

packages/features/Segment.tsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,16 @@ function MatchingTeamMembers({
125125
}
126126
);
127127

128+
if (!hasValidValue) {
129+
return (
130+
<div className="border-subtle bg-muted mt-4 space-y-3 rounded-md border p-4">
131+
<div className="text-subtle flex items-center text-sm font-medium">
132+
<span>{t("no_filter_set")}</span>
133+
</div>
134+
</div>
135+
);
136+
}
137+
128138
if (isPending) {
129139
return (
130140
<div
@@ -149,23 +159,14 @@ function MatchingTeamMembers({
149159

150160
if (!matchingTeamMembersWithResult) return <span>{t("something_went_wrong")}</span>;
151161
const { result: matchingTeamMembers } = matchingTeamMembersWithResult;
152-
if (!matchingTeamMembers || !queryValue) {
153-
return (
154-
<div className="border-subtle bg-muted mt-4 space-y-3 rounded-md border p-4">
155-
<div className="text-subtle flex items-center text-sm font-medium">
156-
<span>{t("no_filter_set")}</span>
157-
</div>
158-
</div>
159-
);
160-
}
161162

162163
return (
163164
<div className="border-subtle bg-muted mt-4 space-y-3 rounded-md border p-4">
164165
<div className="text-emphasis flex items-center text-sm font-medium">
165-
<span>{t("x_matching_members", { x: matchingTeamMembers.length })}</span>
166+
<span>{t("x_matching_members", { x: matchingTeamMembers?.length ?? 0 })}</span>
166167
</div>
167168
<ul className="divide-subtle divide-y">
168-
{matchingTeamMembers.map((member) => (
169+
{matchingTeamMembers?.map((member) => (
169170
<li key={member.id} className="flex items-center py-2">
170171
<div className="flex flex-1 items-center space-x-2 text-sm">
171172
<span className="font-medium">{member.name}</span>

0 commit comments

Comments
 (0)