@scrippsproduct/networks-ui-library 1.1.9 → 1.1.10-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Form.module-Cd8qH2rj.mjs → Form.module-CarfWK5T.mjs} +1 -1
- package/dist/ResultsTable.module-wcNUQEKe.mjs +14 -0
- package/dist/_commonjsHelpers-DaMA6jEr.mjs +8 -0
- package/dist/assets/ResultsTable.css +1 -1
- package/dist/{chevron-left-DRvpaLmK.mjs → chevron-left-D0UjbrKw.mjs} +1 -1
- package/dist/{chevron-right-C8yCnmfx.mjs → chevron-right-0ZF3LruR.mjs} +1 -1
- package/dist/components/ActionButton/ActionButton.test.js +209 -0
- package/dist/components/AdBlock/AdBlock.test.js +286 -0
- package/dist/components/AdjustableTwoColumnGrid/AdjustableTwoColumnGrid.test.js +295 -0
- package/dist/components/AirDateFormatter/AirDateFormatter.test.js +192 -0
- package/dist/components/AnchorTag/AnchorTag.test.js +463 -0
- package/dist/components/BCVideoPlayer/BCVideoPlayer.test.js +295 -0
- package/dist/components/BasicGridModule/BasicGridModule.js +41 -37
- package/dist/components/BasicGridModule/BasicGridModule.test.js +227 -0
- package/dist/components/Button/Button.test.js +434 -0
- package/dist/components/Carousel/Carousel.js +2 -2
- package/dist/components/Carousel/Carousel.test.js +705 -0
- package/dist/components/CarouselSlide/CarouselSlide.test.js +378 -0
- package/dist/components/CarouselSlide/slide-layouts/TwoColumn/TwoColumnSlide.js +1 -1
- package/dist/components/CastInfoLayout/CastInfoLayout.test.js +294 -0
- package/dist/components/ChannelSearch/ChannelSearch.test.js +565 -0
- package/dist/components/ChoicesItem/ChoicesItem.test.js +428 -0
- package/dist/components/Concat/Concat.js +1 -1
- package/dist/components/Concat/Concat.test.js +115 -0
- package/dist/components/CtaBlock/CtaBlock.js +1 -1
- package/dist/components/CtaBlock/CtaBlock.test.js +226 -0
- package/dist/components/CustomDataList/CustomDataList.js +4 -4
- package/dist/components/CustomSelect/CustomSelect.js +86 -86
- package/dist/components/CustomSelect/CustomSelect.test.js +313 -0
- package/dist/components/DateNavigation/DateNavigation.js +10 -10
- package/dist/components/DateNavigation/DateNavigation.test.js +370 -0
- package/dist/components/DatePicker/DatePicker.js +1 -1
- package/dist/components/DeviceAndPlatformLists/DeviceAndPlatformLists.test.js +288 -0
- package/dist/components/DrawerNavigation/DrawerNavigation.test.js +316 -0
- package/dist/components/EqualSizeFlexRow/EqualSizeFlexRow.test.js +337 -0
- package/dist/components/EqualSizeGrid/EqualSizeGrid.test.js +358 -0
- package/dist/components/ErrorHandler/ErrorHandler.js +2 -2
- package/dist/components/ErrorHandler/ErrorHandler.test.js +158 -0
- package/dist/components/FeaturedList/FeaturedList.test.js +353 -0
- package/dist/components/Figure/Figure.js +1 -1
- package/dist/components/Figure/Figure.test.js +198 -0
- package/dist/components/FindUs/FindUs.test.js +499 -0
- package/dist/components/FooterNavigation/FooterNavigation.test.js +310 -0
- package/dist/components/GenericList/GenericList.js +1 -1
- package/dist/components/GenericList/GenericList.test.js +288 -0
- package/dist/components/GetAirdateWrapper/GetAirdateWrapper.test.js +689 -0
- package/dist/components/GradientButton/GradientButton.d.ts +1 -1
- package/dist/components/GradientButton/GradientButton.js +33 -31
- package/dist/components/GradientButton/GradientButton.test.js +457 -0
- package/dist/components/GridList/GridList.test.js +371 -0
- package/dist/components/ImageCard/ImageCard.test.js +668 -0
- package/dist/components/ImageCard/ImageCardCore.js +28 -28
- package/dist/components/ImageCard/ImageCardCore.test.js +577 -0
- package/dist/components/ImageReplacementAnchor/ImageReplacementAnchor.test.js +379 -0
- package/dist/components/InfoPanel/InfoPanel.js +1 -1
- package/dist/components/InlineNavigation/InlineNavigation.test.js +149 -0
- package/dist/components/Input/Input.js +1 -1
- package/dist/components/Input/Input.test.js +263 -0
- package/dist/components/InstructionsList/InstructionsList.js +11 -11
- package/dist/components/InstructionsList/InstructionsList.test.js +181 -0
- package/dist/components/LogoListItem/LogoListItem.test.js +303 -0
- package/dist/components/LogoNavigation/LogoNavigation.test.js +352 -0
- package/dist/components/ModalContainer/ModalContainer.js +2 -2
- package/dist/components/NavList/NavList.test.js +332 -0
- package/dist/components/Overlay/Overlay.js +24 -23
- package/dist/components/Overlay/Overlay.test.js +198 -0
- package/dist/components/PageHero/PageHero.test.js +241 -0
- package/dist/components/PageHero/page-hero-layouts/IONShow/IONShowHero.js +1 -1
- package/dist/components/ProgramAirdate/ProgramAirdate.js +1 -1
- package/dist/components/ProgramAirdate/ProgramAirdate.test.js +414 -0
- package/dist/components/PromotionBlock/PromotionBlock.test.js +208 -0
- package/dist/components/PromotionsRowBlock/PromotionsRowBlock.test.js +221 -0
- package/dist/components/PromotionsRowModule/PromotionsRowModule.test.js +349 -0
- package/dist/components/RescanInstructions/RescanInstructions.test.js +218 -0
- package/dist/components/ResponsiveImage/ResponsiveImage.test.js +264 -0
- package/dist/components/ResultsTable/ResultsTable.js +9 -2
- package/dist/components/ResultsTable/ResultsTable.test.js +402 -0
- package/dist/components/ResultsTableBody/ResultsTableBody.js +1 -1
- package/dist/components/ResultsTableBody/ResultsTableBody.test.js +445 -0
- package/dist/components/ResultsTableHeader/ResultsTableHeader.js +37 -15
- package/dist/components/ResultsTableHeader/ResultsTableHeader.test.js +275 -0
- package/dist/components/ScheduleLayout/ScheduleContext.js +654 -626
- package/dist/components/ScheduleLayout/ScheduleLayout.js +1 -1
- package/dist/components/ScheduleLayout/useScheduleContext.js +5 -10
- package/dist/components/ScheduleList/ScheduleList.js +1 -1
- package/dist/components/SectionedContent/SectionedContent.js +1 -1
- package/dist/components/SectionedContent/SectionedContent.test.js +341 -0
- package/dist/components/Select/Select.js +24 -24
- package/dist/components/Select/Select.test.js +367 -0
- package/dist/components/ShowAboutContent/ShowAboutContent.js +1 -1
- package/dist/components/ShowAboutContent/ShowAboutContent.test.js +535 -0
- package/dist/components/ShowAboutLayout/ShowAboutLayout.test.js +570 -0
- package/dist/components/SocialLinks/SocialLinks.js +1 -1
- package/dist/components/StringList/StringList.js +1 -1
- package/dist/components/StringList/StringList.test.js +311 -0
- package/dist/components/TabContent/TabContent.js +1 -1
- package/dist/components/TabContent/TabContent.test.js +274 -0
- package/dist/components/TabNavigation/TabNavigation.js +21 -21
- package/dist/components/TabNavigation/TabNavigation.test.js +535 -0
- package/dist/components/TabbedContent/TabbedContent.test.js +654 -0
- package/dist/components/TextArea/TextArea.js +1 -1
- package/dist/components/UpcomingList/UpcomingList.test.js +471 -0
- package/dist/{index-VjANCDXC.mjs → index-06PEPfBQ.mjs} +1 -1
- package/dist/index-BUN4jQ3m.mjs +3098 -0
- package/dist/index-BVxBrkZB.mjs +3 -0
- package/dist/{index-DC2JJV3a.mjs → index-D3kkcgee.mjs} +1 -1
- package/dist/{index-C-kn9Zhn.mjs → index-DzfYkULW.mjs} +2 -1
- package/dist/magic-string.es-uPKorP4O.mjs +663 -0
- package/dist/matchers-35e4d3bd-BBPNTlen.mjs +2404 -0
- package/dist/react.esm-DLSrfVwM.mjs +23410 -0
- package/dist/test/setupTests.d.ts +1 -0
- package/dist/test/setupTests.js +55 -0
- package/dist/{triangle-PcCcGXjr.mjs → triangle-C4z906Wf.mjs} +1 -1
- package/dist/useScheduleContext-D7FdzNxe.mjs +17 -0
- package/dist/utils/analytics.js +1 -1
- package/dist/utils/getOnNowProgram.js +10 -10
- package/dist/{x-C-QzJ-qD.mjs → x-Ck9Vk5Fo.mjs} +1 -1
- package/package.json +4 -1
- package/dist/ResultsTable.module-1zxhXaem.mjs +0 -14
- package/dist/_commonjsHelpers-C6fGbg64.mjs +0 -6
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { d as m, i as u, r, g as l, s as c } from "../../react.esm-DLSrfVwM.mjs";
|
|
3
|
+
import { ResultsTableBody as a } from "./ResultsTableBody.js";
|
|
4
|
+
m("ResultsTableBody", () => {
|
|
5
|
+
m("Basic Rendering", () => {
|
|
6
|
+
u("should render rows when results provided", () => {
|
|
7
|
+
const e = [
|
|
8
|
+
{ title: "Name", resultKey: "name" }
|
|
9
|
+
], t = [
|
|
10
|
+
{ name: "John Doe" }
|
|
11
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
12
|
+
l(o).toHaveLength(1);
|
|
13
|
+
}), u("should render no results message when results empty", () => {
|
|
14
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
15
|
+
{ title: "Name", resultKey: "name" }
|
|
16
|
+
], noResultsMsg: "No data", results: [] })), l(c.getByText("No data")).toBeInTheDocument();
|
|
17
|
+
}), u("should render items within rows", () => {
|
|
18
|
+
const e = [
|
|
19
|
+
{ title: "Name", resultKey: "name" }
|
|
20
|
+
], t = [
|
|
21
|
+
{ name: "John Doe" }
|
|
22
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
23
|
+
l(o.length).toBeGreaterThan(0);
|
|
24
|
+
}), u("should render mobile labels within items", () => {
|
|
25
|
+
const e = [
|
|
26
|
+
{ title: "Name", resultKey: "name" }
|
|
27
|
+
], t = [
|
|
28
|
+
{ name: "John Doe" }
|
|
29
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__mobile-label");
|
|
30
|
+
l(o.length).toBeGreaterThan(0);
|
|
31
|
+
});
|
|
32
|
+
}), m("Results Prop", () => {
|
|
33
|
+
u("should render one row per result", () => {
|
|
34
|
+
const e = [
|
|
35
|
+
{ title: "Name", resultKey: "name" }
|
|
36
|
+
], t = [
|
|
37
|
+
{ name: "John Doe" },
|
|
38
|
+
{ name: "Jane Smith" },
|
|
39
|
+
{ name: "Bob Johnson" }
|
|
40
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
41
|
+
l(o).toHaveLength(3);
|
|
42
|
+
}), u("should handle single result", () => {
|
|
43
|
+
const e = [
|
|
44
|
+
{ title: "Name", resultKey: "name" }
|
|
45
|
+
], t = [
|
|
46
|
+
{ name: "John Doe" }
|
|
47
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
48
|
+
l(o).toHaveLength(1);
|
|
49
|
+
}), u("should handle empty results array", () => {
|
|
50
|
+
const e = [
|
|
51
|
+
{ title: "Name", resultKey: "name" }
|
|
52
|
+
], { container: t } = r(/* @__PURE__ */ n(a, { columns: e, results: [] })), s = t.querySelector(".results-table__no-results");
|
|
53
|
+
l(s).toBeInTheDocument();
|
|
54
|
+
}), u("should render result values", () => {
|
|
55
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
56
|
+
{ title: "Name", resultKey: "name" }
|
|
57
|
+
], results: [
|
|
58
|
+
{ name: "John Doe" }
|
|
59
|
+
] })), l(c.getByText("John Doe")).toBeInTheDocument();
|
|
60
|
+
}), u("should handle results with string values", () => {
|
|
61
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
62
|
+
{ title: "Name", resultKey: "name" },
|
|
63
|
+
{ title: "Email", resultKey: "email" }
|
|
64
|
+
], results: [
|
|
65
|
+
{ name: "John Doe", email: "john@example.com" }
|
|
66
|
+
] })), l(c.getByText("John Doe")).toBeInTheDocument(), l(c.getByText("john@example.com")).toBeInTheDocument();
|
|
67
|
+
}), u("should handle results with number values", () => {
|
|
68
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
69
|
+
{ title: "Age", resultKey: "age" },
|
|
70
|
+
{ title: "Score", resultKey: "score" }
|
|
71
|
+
], results: [
|
|
72
|
+
{ age: 30, score: 95 }
|
|
73
|
+
] })), l(c.getByText("30")).toBeInTheDocument(), l(c.getByText("95")).toBeInTheDocument();
|
|
74
|
+
}), u("should handle results with boolean values", () => {
|
|
75
|
+
const e = [
|
|
76
|
+
{ title: "Active", resultKey: "active" }
|
|
77
|
+
], t = [
|
|
78
|
+
{ active: !0 }
|
|
79
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
80
|
+
l(o).toHaveLength(1);
|
|
81
|
+
}), u("should render empty string when result key not found", () => {
|
|
82
|
+
const e = [
|
|
83
|
+
{ title: "Name", resultKey: "name" },
|
|
84
|
+
{ title: "Age", resultKey: "age" }
|
|
85
|
+
], t = [
|
|
86
|
+
{ name: "John Doe" }
|
|
87
|
+
// age key missing
|
|
88
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
89
|
+
l(o).toHaveLength(2), l(c.getByText("John Doe")).toBeInTheDocument();
|
|
90
|
+
});
|
|
91
|
+
}), m("Columns Prop", () => {
|
|
92
|
+
u("should render one item per column per row", () => {
|
|
93
|
+
const e = [
|
|
94
|
+
{ title: "Name", resultKey: "name" },
|
|
95
|
+
{ title: "Age", resultKey: "age" }
|
|
96
|
+
], t = [
|
|
97
|
+
{ name: "John Doe", age: 30 }
|
|
98
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
99
|
+
l(o).toHaveLength(2);
|
|
100
|
+
}), u("should handle single column", () => {
|
|
101
|
+
const e = [
|
|
102
|
+
{ title: "Name", resultKey: "name" }
|
|
103
|
+
], t = [
|
|
104
|
+
{ name: "John Doe" }
|
|
105
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
106
|
+
l(o).toHaveLength(1);
|
|
107
|
+
}), u("should handle multiple columns", () => {
|
|
108
|
+
const e = [
|
|
109
|
+
{ title: "Name", resultKey: "name" },
|
|
110
|
+
{ title: "Email", resultKey: "email" },
|
|
111
|
+
{ title: "Phone", resultKey: "phone" },
|
|
112
|
+
{ title: "City", resultKey: "city" }
|
|
113
|
+
], t = [
|
|
114
|
+
{ name: "John", email: "john@example.com", phone: "555-1234", city: "NYC" }
|
|
115
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
116
|
+
l(o).toHaveLength(4);
|
|
117
|
+
}), u("should handle empty columns array", () => {
|
|
118
|
+
const e = [
|
|
119
|
+
{ name: "John Doe" }
|
|
120
|
+
], { container: t } = r(/* @__PURE__ */ n(a, { columns: [], results: e })), s = t.querySelectorAll(".results-table__row");
|
|
121
|
+
l(s).toHaveLength(1);
|
|
122
|
+
const o = t.querySelectorAll(".results-table__item");
|
|
123
|
+
l(o).toHaveLength(0);
|
|
124
|
+
}), u("should use column title for mobile label", () => {
|
|
125
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
126
|
+
{ title: "Full Name", resultKey: "name" }
|
|
127
|
+
], results: [
|
|
128
|
+
{ name: "John Doe" }
|
|
129
|
+
] })), l(c.getByText(/Full Name:/)).toBeInTheDocument();
|
|
130
|
+
}), u("should use column resultKey to access result data", () => {
|
|
131
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
132
|
+
{ title: "Name", resultKey: "fullName" }
|
|
133
|
+
], results: [
|
|
134
|
+
{ fullName: "John Doe" }
|
|
135
|
+
] })), l(c.getByText("John Doe")).toBeInTheDocument();
|
|
136
|
+
});
|
|
137
|
+
}), m("Mobile Labels", () => {
|
|
138
|
+
u("should render mobile label for each item", () => {
|
|
139
|
+
const e = [
|
|
140
|
+
{ title: "Name", resultKey: "name" },
|
|
141
|
+
{ title: "Age", resultKey: "age" }
|
|
142
|
+
], t = [
|
|
143
|
+
{ name: "John Doe", age: 30 }
|
|
144
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__mobile-label");
|
|
145
|
+
l(o).toHaveLength(2);
|
|
146
|
+
}), u("should include column title in mobile label", () => {
|
|
147
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
148
|
+
{ title: "Name", resultKey: "name" }
|
|
149
|
+
], results: [
|
|
150
|
+
{ name: "John Doe" }
|
|
151
|
+
] })), l(c.getByText(/Name:/)).toBeInTheDocument();
|
|
152
|
+
}), u("should include colon after column title in mobile label", () => {
|
|
153
|
+
const e = [
|
|
154
|
+
{ title: "Email Address", resultKey: "email" }
|
|
155
|
+
], t = [
|
|
156
|
+
{ email: "john@example.com" }
|
|
157
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__mobile-label");
|
|
158
|
+
l(o == null ? void 0 : o.textContent).toBe("Email Address:");
|
|
159
|
+
}), u("should render mobile label as span element", () => {
|
|
160
|
+
const e = [
|
|
161
|
+
{ title: "Name", resultKey: "name" }
|
|
162
|
+
], t = [
|
|
163
|
+
{ name: "John Doe" }
|
|
164
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__mobile-label");
|
|
165
|
+
l(o == null ? void 0 : o.tagName).toBe("SPAN");
|
|
166
|
+
});
|
|
167
|
+
}), m("Dynamic CSS Classes", () => {
|
|
168
|
+
u("should add dynamic class based on column title", () => {
|
|
169
|
+
const e = [
|
|
170
|
+
{ title: "Name", resultKey: "name" }
|
|
171
|
+
], t = [
|
|
172
|
+
{ name: "John Doe" }
|
|
173
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__name");
|
|
174
|
+
l(o).toBeInTheDocument();
|
|
175
|
+
}), u("should convert column title to lowercase for class", () => {
|
|
176
|
+
const e = [
|
|
177
|
+
{ title: "EMAIL", resultKey: "email" }
|
|
178
|
+
], t = [
|
|
179
|
+
{ email: "john@example.com" }
|
|
180
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__email");
|
|
181
|
+
l(o).toBeInTheDocument();
|
|
182
|
+
}), u("should replace spaces with hyphens in class", () => {
|
|
183
|
+
const e = [
|
|
184
|
+
{ title: "Full Name", resultKey: "name" }
|
|
185
|
+
], t = [
|
|
186
|
+
{ name: "John Doe" }
|
|
187
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__full-name");
|
|
188
|
+
l(o).toBeInTheDocument();
|
|
189
|
+
}), u("should handle multiple spaces in column title", () => {
|
|
190
|
+
const e = [
|
|
191
|
+
{ title: "First Middle Last", resultKey: "name" }
|
|
192
|
+
], t = [
|
|
193
|
+
{ name: "John Doe" }
|
|
194
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__first-middle");
|
|
195
|
+
l(o).toBeInTheDocument();
|
|
196
|
+
});
|
|
197
|
+
}), m("NoResultsMsg Prop", () => {
|
|
198
|
+
u("should display noResultsMsg when results empty", () => {
|
|
199
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
200
|
+
{ title: "Name", resultKey: "name" }
|
|
201
|
+
], noResultsMsg: "Custom message", results: [] })), l(c.getByText("Custom message")).toBeInTheDocument();
|
|
202
|
+
}), u("should use default noResultsMsg when not provided", () => {
|
|
203
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
204
|
+
{ title: "Name", resultKey: "name" }
|
|
205
|
+
], results: [] })), l(c.getByText("No results were returned")).toBeInTheDocument();
|
|
206
|
+
}), u("should not display noResultsMsg when results exist", () => {
|
|
207
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
208
|
+
{ title: "Name", resultKey: "name" }
|
|
209
|
+
], noResultsMsg: "No data", results: [
|
|
210
|
+
{ name: "John Doe" }
|
|
211
|
+
] })), l(c.queryByText("No data")).not.toBeInTheDocument();
|
|
212
|
+
}), u("should render noResultsMsg in no-results div", () => {
|
|
213
|
+
const e = [
|
|
214
|
+
{ title: "Name", resultKey: "name" }
|
|
215
|
+
], { container: t } = r(/* @__PURE__ */ n(a, { columns: e, noResultsMsg: "Empty", results: [] })), s = t.querySelector(".results-table__no-results");
|
|
216
|
+
l(s == null ? void 0 : s.textContent).toBe("Empty");
|
|
217
|
+
}), u("should apply no-results class to message div", () => {
|
|
218
|
+
const e = [
|
|
219
|
+
{ title: "Name", resultKey: "name" }
|
|
220
|
+
], { container: t } = r(/* @__PURE__ */ n(a, { columns: e, results: [] })), s = t.querySelector(".results-table__no-results");
|
|
221
|
+
l(s).toHaveClass("results-table__item"), l(s).toHaveClass("results-table__no-results");
|
|
222
|
+
});
|
|
223
|
+
}), m("Row and Item Keys", () => {
|
|
224
|
+
u("should generate unique keys for rows", () => {
|
|
225
|
+
const e = [
|
|
226
|
+
{ title: "Name", resultKey: "name" }
|
|
227
|
+
], t = [
|
|
228
|
+
{ name: "John" },
|
|
229
|
+
{ name: "Jane" },
|
|
230
|
+
{ name: "Bob" }
|
|
231
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
232
|
+
l(o).toHaveLength(3);
|
|
233
|
+
}), u("should use index-based keys for rows", () => {
|
|
234
|
+
const e = [
|
|
235
|
+
{ title: "Name", resultKey: "name" }
|
|
236
|
+
], t = [
|
|
237
|
+
{ name: "John Doe" }
|
|
238
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
239
|
+
l(o).toHaveLength(1);
|
|
240
|
+
}), u("should generate unique keys for items", () => {
|
|
241
|
+
const e = [
|
|
242
|
+
{ title: "Name", resultKey: "name" },
|
|
243
|
+
{ title: "Age", resultKey: "age" }
|
|
244
|
+
], t = [
|
|
245
|
+
{ name: "John", age: 30 }
|
|
246
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
247
|
+
l(o).toHaveLength(2);
|
|
248
|
+
});
|
|
249
|
+
}), m("CSS Classes", () => {
|
|
250
|
+
u("should apply results-table__row class to rows", () => {
|
|
251
|
+
const e = [
|
|
252
|
+
{ title: "Name", resultKey: "name" }
|
|
253
|
+
], t = [
|
|
254
|
+
{ name: "John Doe" }
|
|
255
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__row");
|
|
256
|
+
l(o).toBeInTheDocument();
|
|
257
|
+
}), u("should apply results-table__item class to items", () => {
|
|
258
|
+
const e = [
|
|
259
|
+
{ title: "Name", resultKey: "name" }
|
|
260
|
+
], t = [
|
|
261
|
+
{ name: "John Doe" }
|
|
262
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__item");
|
|
263
|
+
l(o).toBeInTheDocument();
|
|
264
|
+
}), u("should apply results-table__mobile-label class to labels", () => {
|
|
265
|
+
const e = [
|
|
266
|
+
{ title: "Name", resultKey: "name" }
|
|
267
|
+
], t = [
|
|
268
|
+
{ name: "John Doe" }
|
|
269
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__mobile-label");
|
|
270
|
+
l(o).toBeInTheDocument();
|
|
271
|
+
}), u("should apply multiple classes to items", () => {
|
|
272
|
+
const e = [
|
|
273
|
+
{ title: "Name", resultKey: "name" }
|
|
274
|
+
], t = [
|
|
275
|
+
{ name: "John Doe" }
|
|
276
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__item");
|
|
277
|
+
l(o).toHaveClass("results-table__item"), l(o).toHaveClass("results-table__name");
|
|
278
|
+
});
|
|
279
|
+
}), m("Default Props", () => {
|
|
280
|
+
u("should use default empty results array", () => {
|
|
281
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
282
|
+
{ title: "Name", resultKey: "name" }
|
|
283
|
+
] })), l(c.getByText("No results were returned")).toBeInTheDocument();
|
|
284
|
+
}), u("should use default empty columns array", () => {
|
|
285
|
+
const e = [
|
|
286
|
+
{ name: "John Doe" }
|
|
287
|
+
], { container: t } = r(/* @__PURE__ */ n(a, { results: e })), s = t.querySelectorAll(".results-table__row");
|
|
288
|
+
l(s).toHaveLength(1);
|
|
289
|
+
const o = t.querySelectorAll(".results-table__item");
|
|
290
|
+
l(o).toHaveLength(0);
|
|
291
|
+
}), u("should use default noResultsMsg", () => {
|
|
292
|
+
r(/* @__PURE__ */ n(a, {})), l(c.getByText("No results were returned")).toBeInTheDocument();
|
|
293
|
+
});
|
|
294
|
+
}), m("Integration Tests", () => {
|
|
295
|
+
u("should render complete table with multiple rows and columns", () => {
|
|
296
|
+
const e = [
|
|
297
|
+
{ title: "Name", resultKey: "name" },
|
|
298
|
+
{ title: "Email", resultKey: "email" },
|
|
299
|
+
{ title: "Age", resultKey: "age" }
|
|
300
|
+
], t = [
|
|
301
|
+
{ name: "John Doe", email: "john@example.com", age: 30 },
|
|
302
|
+
{ name: "Jane Smith", email: "jane@example.com", age: 25 }
|
|
303
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
304
|
+
l(o).toHaveLength(2);
|
|
305
|
+
const h = s.querySelectorAll(".results-table__item");
|
|
306
|
+
l(h).toHaveLength(6), l(c.getByText("John Doe")).toBeInTheDocument(), l(c.getByText("Jane Smith")).toBeInTheDocument(), l(c.getByText("john@example.com")).toBeInTheDocument(), l(c.getByText("jane@example.com")).toBeInTheDocument();
|
|
307
|
+
}), u("should handle mixed data types in results", () => {
|
|
308
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
309
|
+
{ title: "Name", resultKey: "name" },
|
|
310
|
+
{ title: "Age", resultKey: "age" },
|
|
311
|
+
{ title: "Score", resultKey: "score" }
|
|
312
|
+
], results: [
|
|
313
|
+
{ name: "John Doe", age: 30, score: 95 }
|
|
314
|
+
] })), l(c.getByText("John Doe")).toBeInTheDocument(), l(c.getByText("30")).toBeInTheDocument(), l(c.getByText("95")).toBeInTheDocument();
|
|
315
|
+
}), u("should handle partial data in results", () => {
|
|
316
|
+
const e = [
|
|
317
|
+
{ title: "Name", resultKey: "name" },
|
|
318
|
+
{ title: "Email", resultKey: "email" },
|
|
319
|
+
{ title: "Phone", resultKey: "phone" }
|
|
320
|
+
], t = [
|
|
321
|
+
{ name: "John Doe", email: "john@example.com" }
|
|
322
|
+
// phone missing
|
|
323
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
324
|
+
l(o).toHaveLength(3), l(c.getByText("John Doe")).toBeInTheDocument(), l(c.getByText("john@example.com")).toBeInTheDocument();
|
|
325
|
+
}), u("should render all mobile labels correctly", () => {
|
|
326
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
327
|
+
{ title: "Name", resultKey: "name" },
|
|
328
|
+
{ title: "Age", resultKey: "age" }
|
|
329
|
+
], results: [
|
|
330
|
+
{ name: "John Doe", age: 30 }
|
|
331
|
+
] })), l(c.getByText(/Name:/)).toBeInTheDocument(), l(c.getByText(/Age:/)).toBeInTheDocument();
|
|
332
|
+
});
|
|
333
|
+
}), m("Type Safety", () => {
|
|
334
|
+
u("should accept valid column definitions", () => {
|
|
335
|
+
const e = [
|
|
336
|
+
{ title: "Name", resultKey: "name" }
|
|
337
|
+
], t = [
|
|
338
|
+
{ name: "John Doe" }
|
|
339
|
+
];
|
|
340
|
+
l(() => {
|
|
341
|
+
r(/* @__PURE__ */ n(a, { columns: e, results: t }));
|
|
342
|
+
}).not.toThrow();
|
|
343
|
+
}), u("should accept results with string values", () => {
|
|
344
|
+
const e = [
|
|
345
|
+
{ title: "Name", resultKey: "name" }
|
|
346
|
+
], t = [
|
|
347
|
+
{ name: "John Doe", email: "john@example.com" }
|
|
348
|
+
];
|
|
349
|
+
l(() => {
|
|
350
|
+
r(/* @__PURE__ */ n(a, { columns: e, results: t }));
|
|
351
|
+
}).not.toThrow();
|
|
352
|
+
}), u("should accept results with number values", () => {
|
|
353
|
+
const e = [
|
|
354
|
+
{ title: "Age", resultKey: "age" }
|
|
355
|
+
], t = [
|
|
356
|
+
{ age: 30, score: 95 }
|
|
357
|
+
];
|
|
358
|
+
l(() => {
|
|
359
|
+
r(/* @__PURE__ */ n(a, { columns: e, results: t }));
|
|
360
|
+
}).not.toThrow();
|
|
361
|
+
}), u("should accept results with boolean values", () => {
|
|
362
|
+
const e = [
|
|
363
|
+
{ title: "Active", resultKey: "active" }
|
|
364
|
+
], t = [
|
|
365
|
+
{ active: !0, verified: !1 }
|
|
366
|
+
];
|
|
367
|
+
l(() => {
|
|
368
|
+
r(/* @__PURE__ */ n(a, { columns: e, results: t }));
|
|
369
|
+
}).not.toThrow();
|
|
370
|
+
}), u("should accept empty arrays", () => {
|
|
371
|
+
const e = [], t = [];
|
|
372
|
+
l(() => {
|
|
373
|
+
r(/* @__PURE__ */ n(a, { columns: e, results: t }));
|
|
374
|
+
}).not.toThrow();
|
|
375
|
+
});
|
|
376
|
+
}), m("Edge Cases", () => {
|
|
377
|
+
u("should handle very long column titles", () => {
|
|
378
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
379
|
+
{ title: "This is a very long column title that might wrap or overflow", resultKey: "long" }
|
|
380
|
+
], results: [
|
|
381
|
+
{ long: "Value" }
|
|
382
|
+
] })), l(c.getByText(/This is a very long column title/)).toBeInTheDocument();
|
|
383
|
+
}), u("should handle empty string in column title", () => {
|
|
384
|
+
const e = [
|
|
385
|
+
{ title: "", resultKey: "empty" }
|
|
386
|
+
], t = [
|
|
387
|
+
{ empty: "Value" }
|
|
388
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelector(".results-table__item");
|
|
389
|
+
l(o).toBeInTheDocument();
|
|
390
|
+
}), u("should handle special characters in result values", () => {
|
|
391
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
392
|
+
{ title: "Name", resultKey: "name" }
|
|
393
|
+
], results: [
|
|
394
|
+
{ name: `John "Johnny" O'Brien & Sons <Company>` }
|
|
395
|
+
] })), l(c.getByText(/John "Johnny" O'Brien & Sons/)).toBeInTheDocument();
|
|
396
|
+
}), u("should handle numeric zero values", () => {
|
|
397
|
+
r(/* @__PURE__ */ n(a, { columns: [
|
|
398
|
+
{ title: "Score", resultKey: "score" }
|
|
399
|
+
], results: [
|
|
400
|
+
{ score: 0 }
|
|
401
|
+
] })), l(c.getByText("0")).toBeInTheDocument();
|
|
402
|
+
}), u("should handle empty string values", () => {
|
|
403
|
+
const e = [
|
|
404
|
+
{ title: "Name", resultKey: "name" }
|
|
405
|
+
], t = [
|
|
406
|
+
{ name: "" }
|
|
407
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
408
|
+
l(o).toHaveLength(1);
|
|
409
|
+
}), u("should handle many columns", () => {
|
|
410
|
+
const e = Array.from({ length: 10 }, (h, i) => ({
|
|
411
|
+
title: `Column ${i + 1}`,
|
|
412
|
+
resultKey: `col${i + 1}`
|
|
413
|
+
})), t = [
|
|
414
|
+
Object.fromEntries(Array.from({ length: 10 }, (h, i) => [`col${i + 1}`, `Value ${i + 1}`]))
|
|
415
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
416
|
+
l(o).toHaveLength(10);
|
|
417
|
+
}), u("should handle large dataset", () => {
|
|
418
|
+
const e = [
|
|
419
|
+
{ title: "ID", resultKey: "id" }
|
|
420
|
+
], t = Array.from({ length: 100 }, (h, i) => ({
|
|
421
|
+
id: i + 1
|
|
422
|
+
})), { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__row");
|
|
423
|
+
l(o).toHaveLength(100);
|
|
424
|
+
}), u("should handle empty string noResultsMsg", () => {
|
|
425
|
+
const e = [
|
|
426
|
+
{ title: "Name", resultKey: "name" }
|
|
427
|
+
], { container: t } = r(/* @__PURE__ */ n(a, { columns: e, noResultsMsg: "", results: [] })), s = t.querySelector(".results-table__no-results");
|
|
428
|
+
l(s == null ? void 0 : s.textContent).toBe("");
|
|
429
|
+
}), u("should handle results with null values", () => {
|
|
430
|
+
const e = [
|
|
431
|
+
{ title: "Name", resultKey: "name" }
|
|
432
|
+
], t = [
|
|
433
|
+
{ name: null }
|
|
434
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
435
|
+
l(o).toHaveLength(1);
|
|
436
|
+
}), u("should handle results with undefined values", () => {
|
|
437
|
+
const e = [
|
|
438
|
+
{ title: "Name", resultKey: "name" }
|
|
439
|
+
], t = [
|
|
440
|
+
{ name: void 0 }
|
|
441
|
+
], { container: s } = r(/* @__PURE__ */ n(a, { columns: e, results: t })), o = s.querySelectorAll(".results-table__item");
|
|
442
|
+
l(o).toHaveLength(1);
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
});
|
|
@@ -1,20 +1,42 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { classes as u } from "../../utils/helpers.js";
|
|
3
|
+
import { s } from "../../ResultsTable.module-wcNUQEKe.mjs";
|
|
4
|
+
function h({ columns: a = [] }) {
|
|
5
|
+
let t = [];
|
|
6
|
+
const i = a.map((e, d) => {
|
|
7
|
+
if (t.includes(e.title)) {
|
|
8
|
+
const r = `${e.title} ${d + 1}`;
|
|
9
|
+
return t.push(r), {
|
|
10
|
+
...e,
|
|
11
|
+
title: r
|
|
12
|
+
};
|
|
13
|
+
} else
|
|
14
|
+
return t.push(e.title), e;
|
|
15
|
+
});
|
|
16
|
+
return /* @__PURE__ */ l(
|
|
5
17
|
"div",
|
|
6
18
|
{
|
|
7
|
-
className: [
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"results-table__header"
|
|
11
|
-
]
|
|
12
|
-
children: e
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
className: u([
|
|
20
|
+
s["results-table__row"],
|
|
21
|
+
s["results-table__header-row"],
|
|
22
|
+
"results-table__header-row"
|
|
23
|
+
]),
|
|
24
|
+
children: i.map((e) => /* @__PURE__ */ l(
|
|
25
|
+
"div",
|
|
26
|
+
{
|
|
27
|
+
className: [
|
|
28
|
+
s["results-table__header"],
|
|
29
|
+
`results-table__${e.title.replace(" ", "-").toLowerCase()}`,
|
|
30
|
+
"results-table__header"
|
|
31
|
+
].join(" "),
|
|
32
|
+
children: e.title
|
|
33
|
+
},
|
|
34
|
+
`result-header-${e.title}`
|
|
35
|
+
))
|
|
36
|
+
}
|
|
37
|
+
);
|
|
16
38
|
}
|
|
17
39
|
export {
|
|
18
|
-
|
|
19
|
-
|
|
40
|
+
h as ResultsTableHeader,
|
|
41
|
+
h as default
|
|
20
42
|
};
|