@allurereport/web-awesome 3.3.1 → 3.4.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.
Files changed (209) hide show
  1. package/dist/multi/173.app-648d4a8e7d5405e104a1.js +1 -0
  2. package/dist/multi/174.app-648d4a8e7d5405e104a1.js +1 -0
  3. package/dist/multi/252.app-648d4a8e7d5405e104a1.js +1 -0
  4. package/dist/multi/282.app-648d4a8e7d5405e104a1.js +1 -0
  5. package/dist/multi/29.app-648d4a8e7d5405e104a1.js +1 -0
  6. package/dist/multi/310.app-648d4a8e7d5405e104a1.js +1 -0
  7. package/dist/multi/416.app-648d4a8e7d5405e104a1.js +1 -0
  8. package/dist/multi/507.app-648d4a8e7d5405e104a1.js +1 -0
  9. package/dist/multi/527.app-648d4a8e7d5405e104a1.js +1 -0
  10. package/dist/multi/600.app-648d4a8e7d5405e104a1.js +1 -0
  11. package/dist/multi/605.app-648d4a8e7d5405e104a1.js +1 -0
  12. package/dist/multi/638.app-648d4a8e7d5405e104a1.js +1 -0
  13. package/dist/multi/672.app-648d4a8e7d5405e104a1.js +1 -0
  14. package/dist/multi/686.app-648d4a8e7d5405e104a1.js +1 -0
  15. package/dist/multi/725.app-648d4a8e7d5405e104a1.js +1 -0
  16. package/dist/multi/741.app-648d4a8e7d5405e104a1.js +1 -0
  17. package/dist/multi/749.app-648d4a8e7d5405e104a1.js +1 -0
  18. package/dist/multi/755.app-648d4a8e7d5405e104a1.js +1 -0
  19. package/dist/multi/{894.app-8be6acc0a596a2197dbf.js → 894.app-648d4a8e7d5405e104a1.js} +1 -1
  20. package/dist/multi/943.app-648d4a8e7d5405e104a1.js +1 -0
  21. package/dist/multi/980.app-648d4a8e7d5405e104a1.js +1 -0
  22. package/dist/multi/app-648d4a8e7d5405e104a1.js +2 -0
  23. package/dist/multi/{app-8be6acc0a596a2197dbf.js.LICENSE.txt → app-648d4a8e7d5405e104a1.js.LICENSE.txt} +1 -1
  24. package/dist/multi/manifest.json +23 -21
  25. package/dist/multi/{styles-0b84e1ef76554ad2db9a.css → styles-b72a0161ddf41447b31c.css} +10 -10
  26. package/dist/single/app-ae966ad3dc27579d6c39.js +2 -0
  27. package/dist/single/{app-8221eb856e47b4ef50d6.js.LICENSE.txt → app-ae966ad3dc27579d6c39.js.LICENSE.txt} +1 -1
  28. package/dist/single/manifest.json +1 -1
  29. package/package.json +18 -36
  30. package/src/components/BaseLayout/index.tsx +2 -0
  31. package/src/components/Categories/CategoriesTree/index.tsx +2 -0
  32. package/src/components/Categories/CategoryHeaderItem/index.tsx +2 -0
  33. package/src/components/Categories/CategoryTreeItem/index.tsx +2 -0
  34. package/src/components/Categories/GroupTreeItem/index.tsx +2 -0
  35. package/src/components/Categories/HistoryTreeItem/index.tsx +2 -0
  36. package/src/components/Categories/LabelTreeItem/index.tsx +2 -0
  37. package/src/components/Categories/MessageTreeItem/index.tsx +2 -0
  38. package/src/components/Categories/SeverityTreeItem/index.tsx +2 -0
  39. package/src/components/Charts/index.tsx +3 -0
  40. package/src/components/EnvironmentPicker/index.tsx +78 -18
  41. package/src/components/EnvironmentPicker/styles.scss +19 -0
  42. package/src/components/Footer/FooterLogo.tsx +1 -0
  43. package/src/components/Footer/FooterVersion.tsx +2 -0
  44. package/src/components/Footer/index.tsx +3 -1
  45. package/src/components/Header/CiInfo/index.tsx +17 -3
  46. package/src/components/Header/index.tsx +3 -0
  47. package/src/components/Header/styles.scss +1 -0
  48. package/src/components/HeaderControls/index.tsx +1 -0
  49. package/src/components/MainReport/index.tsx +3 -0
  50. package/src/components/Metadata/index.tsx +2 -0
  51. package/src/components/MetadataButton/index.tsx +35 -8
  52. package/src/components/MetadataButton/styles.scss +20 -0
  53. package/src/components/Modal/index.tsx +2 -0
  54. package/src/components/NavTabs/index.tsx +2 -1
  55. package/src/components/ReportBody/HeaderActions.tsx +1 -0
  56. package/src/components/ReportBody/SortBy.tsx +2 -0
  57. package/src/components/ReportBody/index.tsx +4 -1
  58. package/src/components/ReportCategories/index.tsx +2 -0
  59. package/src/components/ReportFilters/BaseFilters.tsx +2 -0
  60. package/src/components/ReportFilters/CategoriesFilter.tsx +2 -0
  61. package/src/components/ReportFilters/RetryFlaky.tsx +2 -0
  62. package/src/components/ReportFilters/TagsFilter.tsx +2 -0
  63. package/src/components/ReportFilters/TransitionFilter.tsx +2 -0
  64. package/src/components/ReportFilters/index.tsx +3 -0
  65. package/src/components/ReportGlobalAttachments/index.tsx +3 -0
  66. package/src/components/ReportGlobalErrors/index.tsx +2 -0
  67. package/src/components/ReportHeader/ReportHeaderLabelList.tsx +1 -0
  68. package/src/components/ReportHeader/ReportHeaderLogo.tsx +3 -1
  69. package/src/components/ReportHeader/ReportHeaderPie.tsx +2 -0
  70. package/src/components/ReportHeader/index.tsx +2 -0
  71. package/src/components/ReportMetadata/MetadataItem.tsx +1 -0
  72. package/src/components/ReportMetadata/MetadataSummary.tsx +3 -1
  73. package/src/components/ReportMetadata/MetadataTestType.tsx +2 -0
  74. package/src/components/ReportMetadata/MetadataWithIcon.tsx +2 -0
  75. package/src/components/ReportMetadata/index.tsx +61 -17
  76. package/src/components/ReportQualityGateResults/index.tsx +6 -2
  77. package/src/components/ReportSearch/index.tsx +1 -0
  78. package/src/components/ReportTabs/index.tsx +3 -0
  79. package/src/components/SectionPicker/index.tsx +2 -0
  80. package/src/components/SectionSwitcher/index.tsx +3 -0
  81. package/src/components/SideBySide/index.tsx +1 -0
  82. package/src/components/SplitLayout/index.tsx +2 -0
  83. package/src/components/TestResult/TestStepsEmpty/index.tsx +2 -0
  84. package/src/components/TestResult/TrAttachmentsView/index.tsx +2 -0
  85. package/src/components/TestResult/TrDescription/index.tsx +16 -3
  86. package/src/components/TestResult/TrDropdown/index.tsx +1 -0
  87. package/src/components/TestResult/TrEmpty/index.tsx +3 -1
  88. package/src/components/TestResult/TrEnvironmentItem/index.tsx +3 -0
  89. package/src/components/TestResult/TrEnvironmentsView/index.tsx +8 -2
  90. package/src/components/TestResult/TrError/TrDiff.tsx +3 -1
  91. package/src/components/TestResult/TrError/index.tsx +20 -18
  92. package/src/components/TestResult/TrError/styles.scss +0 -25
  93. package/src/components/TestResult/TrHeader/TrBreadcrumbs.tsx +3 -1
  94. package/src/components/TestResult/TrHeader/index.tsx +2 -0
  95. package/src/components/TestResult/TrHeader/styles.scss +1 -0
  96. package/src/components/TestResult/TrHistory/TrHistoryItem.tsx +3 -1
  97. package/src/components/TestResult/TrHistory/index.tsx +2 -0
  98. package/src/components/TestResult/TrInfo/TrInfoStatuses.tsx +2 -0
  99. package/src/components/TestResult/TrInfo/index.tsx +2 -0
  100. package/src/components/TestResult/TrLinks/index.tsx +63 -11
  101. package/src/components/TestResult/TrMetadata/index.tsx +44 -5
  102. package/src/components/TestResult/TrNavigation/index.tsx +2 -0
  103. package/src/components/TestResult/TrOverview.tsx +20 -17
  104. package/src/components/TestResult/TrParameters/index.tsx +41 -7
  105. package/src/components/TestResult/TrPrevStatuses/index.tsx +2 -0
  106. package/src/components/TestResult/TrPwTraces/PwTraceButton.tsx +44 -9
  107. package/src/components/TestResult/TrPwTraces/index.tsx +5 -1
  108. package/src/components/TestResult/TrPwTraces/openPwTraceInNewTab.ts +29 -0
  109. package/src/components/TestResult/TrRetriesView/TrRetriesItem.tsx +3 -1
  110. package/src/components/TestResult/TrRetriesView/index.tsx +2 -0
  111. package/src/components/TestResult/TrSetup/index.tsx +3 -1
  112. package/src/components/TestResult/TrSeverity/index.tsx +2 -0
  113. package/src/components/TestResult/TrStatus/index.tsx +2 -0
  114. package/src/components/TestResult/TrSteps/TrAttachment.tsx +38 -6
  115. package/src/components/TestResult/TrSteps/TrAttachmentInfo.tsx +50 -2
  116. package/src/components/TestResult/TrSteps/TrBodyItems.tsx +42 -0
  117. package/src/components/TestResult/TrSteps/TrErrorStep.tsx +40 -0
  118. package/src/components/TestResult/TrSteps/TrStep.tsx +31 -65
  119. package/src/components/TestResult/TrSteps/TrStepHeader.tsx +50 -0
  120. package/src/components/TestResult/TrSteps/TrStepInfo.tsx +1 -0
  121. package/src/components/TestResult/TrSteps/index.tsx +12 -32
  122. package/src/components/TestResult/TrSteps/styles.scss +8 -0
  123. package/src/components/TestResult/TrSteps/wrongAttachment.tsx +2 -1
  124. package/src/components/TestResult/TrTabs/index.tsx +1 -0
  125. package/src/components/TestResult/TrTeardown/index.tsx +3 -1
  126. package/src/components/TestResult/bodyItems.ts +151 -0
  127. package/src/components/TestResult/index.tsx +2 -0
  128. package/src/components/Timeline/index.tsx +12 -2
  129. package/src/components/ToggleLayout/index.tsx +1 -0
  130. package/src/components/Tree/index.tsx +6 -2
  131. package/src/components/Tree/styles.scss +11 -0
  132. package/src/index.tsx +9 -3
  133. package/src/locales/ar.json +427 -0
  134. package/src/locales/az.json +43 -46
  135. package/src/locales/de.json +5 -0
  136. package/src/locales/en.json +5 -0
  137. package/src/locales/es.json +5 -0
  138. package/src/locales/fr.json +5 -0
  139. package/src/locales/he.json +5 -0
  140. package/src/locales/hy.json +5 -0
  141. package/src/locales/it.json +5 -0
  142. package/src/locales/ja.json +5 -0
  143. package/src/locales/ka.json +5 -0
  144. package/src/locales/kr.json +5 -0
  145. package/src/locales/nl.json +5 -0
  146. package/src/locales/pl.json +5 -0
  147. package/src/locales/pt.json +5 -0
  148. package/src/locales/ru.json +5 -0
  149. package/src/locales/sv.json +5 -0
  150. package/src/locales/tr.json +5 -0
  151. package/src/locales/uk.json +5 -0
  152. package/src/locales/zh-TW.json +432 -0
  153. package/src/locales/zh.json +5 -0
  154. package/src/stores/categories.ts +1 -0
  155. package/src/stores/chart.ts +2 -1
  156. package/src/stores/env.ts +14 -4
  157. package/src/stores/envInfo.ts +1 -0
  158. package/src/stores/globals.ts +1 -0
  159. package/src/stores/locale.ts +1 -0
  160. package/src/stores/qualityGate.ts +1 -0
  161. package/src/stores/sections.ts +1 -0
  162. package/src/stores/stats.ts +12 -6
  163. package/src/stores/testResult.ts +1 -0
  164. package/src/stores/testResults.ts +1 -0
  165. package/src/stores/timeline.ts +2 -0
  166. package/src/stores/tree.ts +2 -0
  167. package/src/stores/treeFilters/actions.ts +1 -0
  168. package/src/stores/treeFilters/store.ts +1 -0
  169. package/src/stores/treeFilters/utils.ts +1 -0
  170. package/src/stores/variables.ts +1 -0
  171. package/src/utils/time.ts +1 -0
  172. package/src/utils/treeFilters.ts +2 -0
  173. package/test/components/EnvironmentPicker.test.tsx +133 -0
  174. package/test/components/Header/CiInfo.test.tsx +15 -0
  175. package/test/components/Header.test.tsx +1 -0
  176. package/test/components/TestResult/PwTraceButton.test.tsx +104 -0
  177. package/test/components/TestResult/TrErrorStep.test.tsx +127 -0
  178. package/test/components/TestResult/TrOverview.test.tsx +114 -0
  179. package/test/components/TestResult/bodyItems.test.ts +194 -0
  180. package/test/components/TestResult/openPwTraceInNewTab.test.ts +65 -0
  181. package/test/components/Timeline.test.tsx +104 -0
  182. package/test/stores/treeFilters/actions.test.ts +82 -0
  183. package/test/utils/ownerAddress.test.ts +1 -0
  184. package/test/utils/treeFilters.test.ts +1 -0
  185. package/tsconfig.json +1 -2
  186. package/tsconfig.node.json +2 -1
  187. package/types.d.ts +2 -0
  188. package/.eslintrc.cjs +0 -18
  189. package/dist/multi/173.app-8be6acc0a596a2197dbf.js +0 -1
  190. package/dist/multi/174.app-8be6acc0a596a2197dbf.js +0 -1
  191. package/dist/multi/252.app-8be6acc0a596a2197dbf.js +0 -1
  192. package/dist/multi/282.app-8be6acc0a596a2197dbf.js +0 -1
  193. package/dist/multi/29.app-8be6acc0a596a2197dbf.js +0 -1
  194. package/dist/multi/416.app-8be6acc0a596a2197dbf.js +0 -1
  195. package/dist/multi/527.app-8be6acc0a596a2197dbf.js +0 -1
  196. package/dist/multi/600.app-8be6acc0a596a2197dbf.js +0 -1
  197. package/dist/multi/605.app-8be6acc0a596a2197dbf.js +0 -1
  198. package/dist/multi/638.app-8be6acc0a596a2197dbf.js +0 -1
  199. package/dist/multi/672.app-8be6acc0a596a2197dbf.js +0 -1
  200. package/dist/multi/686.app-8be6acc0a596a2197dbf.js +0 -1
  201. package/dist/multi/725.app-8be6acc0a596a2197dbf.js +0 -1
  202. package/dist/multi/741.app-8be6acc0a596a2197dbf.js +0 -1
  203. package/dist/multi/749.app-8be6acc0a596a2197dbf.js +0 -1
  204. package/dist/multi/755.app-8be6acc0a596a2197dbf.js +0 -1
  205. package/dist/multi/943.app-8be6acc0a596a2197dbf.js +0 -1
  206. package/dist/multi/980.app-8be6acc0a596a2197dbf.js +0 -1
  207. package/dist/multi/app-8be6acc0a596a2197dbf.js +0 -2
  208. package/dist/single/app-8221eb856e47b4ef50d6.js +0 -2
  209. package/src/components/TestResult/TrPwTraces/PwTrace.tsx +0 -34
@@ -12,6 +12,7 @@
12
12
  background: none;
13
13
  padding: 0;
14
14
  width: max-content;
15
+ text-align: left;
15
16
  display: flex;
16
17
  align-items: center;
17
18
  gap: 8px;
@@ -48,9 +49,28 @@
48
49
  }
49
50
  }
50
51
 
52
+ .report-metadata-header-truncated {
53
+ width: 100%;
54
+ min-width: 0;
55
+ }
56
+
57
+ .report-metadata-title-container {
58
+ min-width: 0;
59
+ flex: 1 1 auto;
60
+ }
61
+
51
62
  .report-metadata-header-opened {
52
63
  .report-metadata-header-arrow {
53
64
  transform: rotate(0);
54
65
  opacity: 0;
55
66
  }
56
67
  }
68
+
69
+ .report-metadata-title-truncated {
70
+ display: block;
71
+ max-width: 100%;
72
+ min-width: 0;
73
+ white-space: nowrap;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
76
+ }
@@ -1,4 +1,5 @@
1
1
  import { Modal, type ModalTranslations } from "@allurereport/web-components";
2
+
2
3
  import { useI18n } from "@/stores";
3
4
  import { isModalOpen, modalData } from "@/stores/modal";
4
5
 
@@ -8,6 +9,7 @@ export const ModalComponent = () => {
8
9
  const translations: ModalTranslations = {
9
10
  tooltipDownload: t("downloadAttachment"),
10
11
  tooltipPreview: t("previewAttachment"),
12
+ tooltipSyntaxHighlight: t("syntaxHighlight"),
11
13
  openInNewTabButton: t("openInNewTab"),
12
14
  };
13
15
 
@@ -1,6 +1,7 @@
1
1
  import { Text } from "@allurereport/web-components";
2
2
  import { type ComponentChildren, createContext } from "preact";
3
3
  import { useContext, useState } from "preact/hooks";
4
+
4
5
  import * as styles from "./styles.scss";
5
6
 
6
7
  type NavTabsContextT = {
@@ -43,7 +44,7 @@ export const NavTab = (props: {
43
44
  "isCurrentTab"?: boolean;
44
45
  }) => {
45
46
  const { currentTab, setCurrentTab } = useNavTabsContext();
46
- const { id, children, onClick, "data-testid": dataTestId, "isCurrentTab": overrideIsCurrentTab } = props;
47
+ const { id, children, onClick, "data-testid": dataTestId, isCurrentTab: overrideIsCurrentTab } = props;
47
48
  const isCurrentTab = overrideIsCurrentTab !== undefined ? overrideIsCurrentTab : currentTab === id;
48
49
  const handleTabClick = () => {
49
50
  if (onClick) {
@@ -1,5 +1,6 @@
1
1
  import { ReportFilters } from "../ReportFilters";
2
2
  import { ReportSearch } from "../ReportSearch";
3
+
3
4
  import * as styles from "./styles.scss";
4
5
 
5
6
  export const HeaderActions = () => {
@@ -1,8 +1,10 @@
1
1
  import { DropdownButton, Link, Menu, SvgIcon, Text, allureIcons } from "@allurereport/web-components";
2
2
  import clsx from "clsx";
3
3
  import type { ComponentChildren } from "preact";
4
+
4
5
  import { useI18n } from "@/stores/locale";
5
6
  import { type SortByDirection, type SortByField, type SortBy as TSortBy, setSortBy, sortBy } from "@/stores/treeSort";
7
+
6
8
  import * as styles from "./styles.scss";
7
9
 
8
10
  const BtnWrapper = ({ children }: { children: ComponentChildren }) => {
@@ -1,14 +1,17 @@
1
1
  import { capitalize, statusesList } from "@allurereport/core-api";
2
2
  import { Counter, Loadable } from "@allurereport/web-components";
3
+
3
4
  import { reportStatsStore, statsByEnvStore } from "@/stores";
4
5
  import { currentEnvironment } from "@/stores/env";
5
6
  import { useI18n } from "@/stores/locale";
6
7
  import { setTreeStatus, treeStatus } from "@/stores/treeFilters/store";
8
+
7
9
  import { ReportTab, ReportTabsList } from "../ReportTabs";
8
10
  import { TreeList } from "../Tree";
11
+ import { ReportContentProvider } from "./context";
9
12
  import { HeaderActions } from "./HeaderActions";
10
13
  import { SortBy } from "./SortBy";
11
- import { ReportContentProvider } from "./context";
14
+
12
15
  import * as styles from "./styles.scss";
13
16
 
14
17
  const ALL_TAB = "total";
@@ -1,7 +1,9 @@
1
1
  import { Loadable, PageLoader } from "@allurereport/web-components";
2
+
2
3
  import { CategoriesTree } from "@/components/Categories/CategoriesTree";
3
4
  import { useI18n } from "@/stores";
4
5
  import { categoriesStore } from "@/stores/categories";
6
+
5
7
  import * as styles from "./styles.scss";
6
8
 
7
9
  export const ReportCategories = () => {
@@ -19,7 +19,9 @@ import {
19
19
  } from "@allurereport/web-components";
20
20
  import { createPortal } from "preact/compat";
21
21
  import { useCallback, useEffect, useRef, useState } from "preact/hooks";
22
+
22
23
  import { useI18n } from "@/stores/locale";
24
+
23
25
  import * as styles from "./styles.scss";
24
26
 
25
27
  const FilterBtn = (props: {
@@ -1,6 +1,8 @@
1
1
  import { computed } from "@preact/signals";
2
+
2
3
  import { useI18n } from "@/stores";
3
4
  import { treeCategories } from "@/stores/treeFilters/store";
5
+
4
6
  import type { AwesomeArrayFieldFilter } from "../../stores/treeFilters/model";
5
7
  import { ArrayFieldFilter } from "./BaseFilters";
6
8
 
@@ -1,6 +1,8 @@
1
1
  import { allureIcons } from "@allurereport/web-components";
2
+
2
3
  import { useI18n } from "@/stores";
3
4
  import type { AwesomeBooleanField, AwesomeFieldFilter } from "@/stores/treeFilters/model";
5
+
4
6
  import { BooleanFieldFilter } from "./BaseFilters";
5
7
 
6
8
  type RetryOrFlakyFilter = AwesomeFieldFilter & {
@@ -1,6 +1,8 @@
1
1
  import { computed } from "@preact/signals";
2
+
2
3
  import { useI18n } from "@/stores";
3
4
  import { treeTags } from "@/stores/treeFilters/store";
5
+
4
6
  import type { AwesomeArrayFieldFilter } from "../../stores/treeFilters/model";
5
7
  import { ArrayFieldFilter } from "./BaseFilters";
6
8
 
@@ -1,6 +1,8 @@
1
1
  import { allureIcons } from "@allurereport/web-components";
2
2
  import { useMemo } from "preact/hooks";
3
+
3
4
  import { useI18n } from "@/stores";
5
+
4
6
  import type { AwesomeFilterGroupSimple } from "../../stores/treeFilters/model";
5
7
  import { MultipleChoiceFieldFilter } from "./BaseFilters";
6
8
 
@@ -1,4 +1,5 @@
1
1
  import { For } from "@preact/signals/utils";
2
+
2
3
  import type { AwesomeFilter } from "@/stores/treeFilters/model";
3
4
  import { setTreeFilter, treeQuickFilters } from "@/stores/treeFilters/store";
4
5
  import {
@@ -8,11 +9,13 @@ import {
8
9
  isTagFilter,
9
10
  isTransitionFilter,
10
11
  } from "@/stores/treeFilters/utils";
12
+
11
13
  import { BooleanFieldFilter } from "./BaseFilters";
12
14
  import { CategoriesFilter } from "./CategoriesFilter";
13
15
  import { RetryFlakyFilter } from "./RetryFlaky";
14
16
  import { TagsFilter } from "./TagsFilter";
15
17
  import { TransitionFilter } from "./TransitionFilter";
18
+
16
19
  import * as styles from "./styles.scss";
17
20
 
18
21
  const Filter = (props: { filter: AwesomeFilter; onChange: (filter: AwesomeFilter) => void }) => {
@@ -1,9 +1,12 @@
1
1
  import type { AttachmentTestStepResult } from "@allurereport/core-api";
2
2
  import { Loadable } from "@allurereport/web-components";
3
+
3
4
  import { TrAttachmentView } from "@/components/TestResult/TrAttachmentsView";
4
5
  import { useI18n } from "@/stores";
5
6
  import { globalsStore } from "@/stores/globals";
7
+
6
8
  import { AwesomeTestResult } from "../../../types";
9
+
7
10
  import * as styles from "./styles.scss";
8
11
 
9
12
  export const ReportGlobalAttachments = () => {
@@ -1,7 +1,9 @@
1
1
  import { Loadable } from "@allurereport/web-components";
2
+
2
3
  import { TrError } from "@/components/TestResult/TrError";
3
4
  import { useI18n } from "@/stores";
4
5
  import { globalsStore } from "@/stores/globals";
6
+
5
7
  import * as styles from "./styles.scss";
6
8
 
7
9
  export const ReportGlobalErrors = () => {
@@ -1,4 +1,5 @@
1
1
  import { Label } from "@allurereport/web-components";
2
+
2
3
  import * as styles from "@/components/ReportHeader/styles.scss";
3
4
 
4
5
  export const ReportHeaderLabelList = () => {
@@ -1,8 +1,10 @@
1
1
  import { getReportOptions } from "@allurereport/web-commons";
2
2
  import { ReportLogo } from "@allurereport/web-components";
3
- import * as styles from "@/components/ReportHeader/styles.scss";
3
+
4
4
  import type { AwesomeReportOptions } from "../../../types";
5
5
 
6
+ import * as styles from "@/components/ReportHeader/styles.scss";
7
+
6
8
  export const ReportHeaderLogo = () => {
7
9
  const { logo } = getReportOptions<AwesomeReportOptions>() ?? {};
8
10
 
@@ -1,5 +1,7 @@
1
1
  import { Loadable, SuccessRatePieChart } from "@allurereport/web-components";
2
+
2
3
  import { pieChartStore } from "@/stores/chart";
4
+
3
5
  import * as styles from "./styles.scss";
4
6
 
5
7
  export const ReportHeaderPie = () => (
@@ -1,11 +1,13 @@
1
1
  import { getReportOptions } from "@allurereport/web-commons";
2
2
  import { Heading, Loadable, Text, TooltipWrapper } from "@allurereport/web-components";
3
3
  import type { AwesomeReportOptions } from "types";
4
+
4
5
  import { ReportHeaderLogo } from "@/components/ReportHeader/ReportHeaderLogo";
5
6
  import { ReportHeaderPie } from "@/components/ReportHeader/ReportHeaderPie";
6
7
  import { TrStatus } from "@/components/TestResult/TrStatus";
7
8
  import { currentLocaleIso, useI18n } from "@/stores";
8
9
  import { globalsStore } from "@/stores/globals";
10
+
9
11
  import * as styles from "./styles.scss";
10
12
 
11
13
  export const ReportHeader = () => {
@@ -1,6 +1,7 @@
1
1
  import { Text } from "@allurereport/web-components";
2
2
  import { clsx } from "clsx";
3
3
  import type { FunctionalComponent } from "preact";
4
+
4
5
  import * as styles from "./styles.scss";
5
6
 
6
7
  export type MetadataProps = {
@@ -1,12 +1,14 @@
1
1
  import { type Statistic, capitalize, statusesList } from "@allurereport/core-api";
2
2
  import { computed } from "@preact/signals";
3
3
  import type { FunctionalComponent } from "preact";
4
+
4
5
  import MetadataItem, { type MetadataProps } from "@/components/ReportMetadata/MetadataItem";
5
6
  import { MetadataTestType } from "@/components/ReportMetadata/MetadataTestType";
6
7
  import { MetadataWithIcon } from "@/components/ReportMetadata/MetadataWithIcon";
7
- import * as styles from "@/components/ReportMetadata/styles.scss";
8
8
  import { useI18n } from "@/stores/locale";
9
9
 
10
+ import * as styles from "@/components/ReportMetadata/styles.scss";
11
+
10
12
  export interface MetadataSummaryProps {
11
13
  stats: Statistic;
12
14
  }
@@ -1,7 +1,9 @@
1
1
  import { Text } from "@allurereport/web-components";
2
2
  import { clsx } from "clsx";
3
3
  import type { FunctionComponent } from "preact";
4
+
4
5
  import type { MetadataProps } from "@/components/ReportMetadata/MetadataItem";
6
+
5
7
  import * as styles from "@/components/ReportMetadata/styles.scss";
6
8
 
7
9
  export const MetadataTestType: FunctionComponent<MetadataProps> = ({ status, count }) => {
@@ -1,6 +1,8 @@
1
1
  import { SvgIcon, Text, allureIcons } from "@allurereport/web-components";
2
2
  import type { FunctionComponent } from "preact";
3
+
3
4
  import type { MetadataProps } from "@/components/ReportMetadata/MetadataItem";
5
+
4
6
  import * as styles from "./styles.scss";
5
7
 
6
8
  const icons: Record<string, string> = {
@@ -1,16 +1,21 @@
1
1
  import type { EnvironmentItem } from "@allurereport/core-api";
2
- import { Loadable } from "@allurereport/web-components";
2
+ import { Button, Loadable } from "@allurereport/web-components";
3
3
  import type { FunctionalComponent } from "preact";
4
- import { useEffect, useState } from "preact/hooks";
4
+ import { useEffect } from "preact/hooks";
5
+
5
6
  import { MetadataList } from "@/components/Metadata";
6
7
  import { MetadataButton } from "@/components/MetadataButton";
7
8
  import { MetadataSummary } from "@/components/ReportMetadata/MetadataSummary";
8
9
  import { reportStatsStore, statsByEnvStore, useI18n } from "@/stores";
9
10
  import { currentEnvironment } from "@/stores/env";
10
11
  import { envInfoStore } from "@/stores/envInfo";
12
+ import { collapsedTrees, toggleTree } from "@/stores/tree";
11
13
  import { fetchVariables, variables } from "@/stores/variables";
14
+
12
15
  import * as styles from "./styles.scss";
13
16
 
17
+ const REPORT_VISIBLE_LIMIT = 8;
18
+
14
19
  export interface MetadataItem extends EnvironmentItem {
15
20
  value?: string;
16
21
  }
@@ -29,39 +34,78 @@ export type MetadataVariablesProps = {
29
34
  };
30
35
 
31
36
  const Metadata: FunctionalComponent<MetadataProps> = ({ envInfo = [] }) => {
32
- const [isOpened, setIsOpen] = useState(true);
33
- const convertedEnvInfo = envInfo.map((env) => {
34
- return { ...env, value: env.values.join(", ") };
35
- });
37
+ const envKey = currentEnvironment.value ?? "default";
38
+ const sectionId = `report-${envKey}-metadata`;
39
+ const showAllId = `report-${envKey}-metadata-showAll`;
40
+ const isOpened = !collapsedTrees.value.has(sectionId);
41
+ const showAll = collapsedTrees.value.has(showAllId);
42
+ const list = envInfo.map((env) => ({ ...env, value: env.values.join(", ") }));
43
+ const totalCount = list.length;
44
+ const visibleList = totalCount <= REPORT_VISIBLE_LIMIT ? list : showAll ? list : list.slice(0, REPORT_VISIBLE_LIMIT);
45
+ const { t } = useI18n("ui");
36
46
 
37
47
  return (
38
48
  <div class={styles["report-metadata"]}>
39
- <MetadataButton isOpened={isOpened} setIsOpen={setIsOpen} title={"Metadata"} counter={envInfo.length} />
40
- {isOpened && <MetadataList envInfo={convertedEnvInfo} />}
49
+ <MetadataButton
50
+ isOpened={isOpened}
51
+ setIsOpen={() => toggleTree(sectionId)}
52
+ title={t("metadata")}
53
+ counter={envInfo.length}
54
+ />
55
+ {isOpened && (
56
+ <>
57
+ <MetadataList envInfo={visibleList} />
58
+ {totalCount > REPORT_VISIBLE_LIMIT && (
59
+ <Button
60
+ style="ghost"
61
+ size="s"
62
+ text={showAll ? t("showLess") : t("showMore")}
63
+ onClick={() => toggleTree(showAllId)}
64
+ />
65
+ )}
66
+ </>
67
+ )}
41
68
  </div>
42
69
  );
43
70
  };
44
71
 
45
72
  const MetadataVariables: FunctionalComponent<MetadataVariablesProps> = (props) => {
46
73
  const { t } = useI18n("ui");
47
- const [isOpened, setIsOpen] = useState(true);
48
- const convertedEnvInfo = Object.entries(props.variables).map(([key, value]) => {
49
- return {
50
- name: key,
51
- value,
52
- } as MetadataItem;
53
- });
74
+ const envKey = currentEnvironment.value ?? "default";
75
+ const sectionId = `report-${envKey}-variables`;
76
+ const showAllId = `report-${envKey}-variables-showAll`;
77
+ const isOpened = !collapsedTrees.value.has(sectionId);
78
+ const showAll = collapsedTrees.value.has(showAllId);
79
+ const fullList = Object.entries(props.variables).map(([key, value]) => ({
80
+ name: key,
81
+ value,
82
+ })) as MetadataItem[];
83
+ const totalCount = fullList.length;
84
+ const visibleList =
85
+ totalCount <= REPORT_VISIBLE_LIMIT ? fullList : showAll ? fullList : fullList.slice(0, REPORT_VISIBLE_LIMIT);
54
86
 
55
87
  return (
56
88
  <div class={styles["report-metadata"]} data-testid={"report-variables"}>
57
89
  <MetadataButton
58
90
  isOpened={isOpened}
59
- setIsOpen={setIsOpen}
91
+ setIsOpen={() => toggleTree(sectionId)}
60
92
  title={t("variables")}
61
93
  counter={Object.keys(props.variables).length}
62
94
  data-testid={"report-variables-button"}
63
95
  />
64
- {isOpened && <MetadataList envInfo={convertedEnvInfo} />}
96
+ {isOpened && (
97
+ <>
98
+ <MetadataList envInfo={visibleList} />
99
+ {totalCount > REPORT_VISIBLE_LIMIT && (
100
+ <Button
101
+ style="ghost"
102
+ size="s"
103
+ text={showAll ? t("showLess") : t("showMore")}
104
+ onClick={() => toggleTree(showAllId)}
105
+ />
106
+ )}
107
+ </>
108
+ )}
65
109
  </div>
66
110
  );
67
111
  };
@@ -2,11 +2,13 @@ import { DEFAULT_ENVIRONMENT } from "@allurereport/core-api";
2
2
  import type { QualityGateValidationResult } from "@allurereport/plugin-api";
3
3
  import { Loadable, SvgIcon, Text, allureIcons } from "@allurereport/web-components";
4
4
  import { useState } from "preact/hooks";
5
+
5
6
  import { MetadataButton } from "@/components/MetadataButton";
6
7
  import { TrError } from "@/components/TestResult/TrError";
7
8
  import { useI18n } from "@/stores";
8
- import { currentEnvironment } from "@/stores/env";
9
+ import { currentEnvironment, environmentNameById } from "@/stores/env";
9
10
  import { qualityGateStore } from "@/stores/qualityGate";
11
+
10
12
  import * as styles from "./styles.scss";
11
13
 
12
14
  const QualityGateResultsList = ({ results }: { results: QualityGateValidationResult[] }) => (
@@ -84,7 +86,9 @@ export const ReportQualityGateResults = () => {
84
86
  <MetadataButton
85
87
  isOpened={isOpened}
86
88
  setIsOpen={toggleEnv}
87
- title={`${tEnvironments("environment", { count: 1 })}: "${env}"`}
89
+ title={`${tEnvironments("environment", { count: 1 })}: "${environmentNameById(env)}"`}
90
+ titleTooltipText={environmentNameById(env)}
91
+ truncateTitle
88
92
  counter={envResults.length}
89
93
  data-testid={"quality-gate-results-section-env-button"}
90
94
  />
@@ -1,4 +1,5 @@
1
1
  import { SearchBox } from "@allurereport/web-components";
2
+
2
3
  import { useI18n } from "@/stores/locale";
3
4
  import { setTreeQueryFilter, treeQueryFilterValue } from "@/stores/treeFilters/store";
4
5
 
@@ -2,8 +2,11 @@ import { Text } from "@allurereport/web-components";
2
2
  import { useComputed } from "@preact/signals";
3
3
  import { type ComponentChildren } from "preact";
4
4
  import { useCallback } from "preact/hooks";
5
+
5
6
  import { setTreeStatus, treeStatus } from "@/stores/treeFilters/store";
7
+
6
8
  import type { AwesomeStatus } from "../../../types.js";
9
+
7
10
  import * as styles from "./styles.scss";
8
11
 
9
12
  export const ReportTabsList = (props: { children: ComponentChildren }) => {
@@ -1,6 +1,8 @@
1
1
  import { DropdownButton, Menu, SvgIcon, allureIcons } from "@allurereport/web-components";
2
+
2
3
  import { useI18n } from "@/stores";
3
4
  import { availableSections, currentSection, setSection } from "@/stores/sections";
5
+
4
6
  import * as styles from "./styles.scss";
5
7
 
6
8
  export type SectionItem = {
@@ -1,8 +1,11 @@
1
1
  import type { VNode } from "preact";
2
+
2
3
  import { Charts } from "@/components/Charts";
3
4
  import { Report } from "@/components/Report";
4
5
  import { currentSection } from "@/stores/sections";
6
+
5
7
  import { Timeline } from "../Timeline";
8
+
6
9
  import * as styles from "./styles.scss";
7
10
 
8
11
  export const SectionSwitcher = () => {
@@ -1,6 +1,7 @@
1
1
  import type { JSX } from "preact";
2
2
  import { useEffect, useMemo, useRef } from "preact/hooks";
3
3
  import Split from "split.js";
4
+
4
5
  import * as styles from "./styles.scss";
5
6
 
6
7
  const SideBySide = ({ left, right }: { left: JSX.Element; right: JSX.Element }) => {
@@ -2,6 +2,7 @@ import { Loadable, PageLoader, Text } from "@allurereport/web-components";
2
2
  import { computed } from "@preact/signals";
3
3
  import type { JSX } from "preact";
4
4
  import { useEffect, useRef, useState } from "preact/hooks";
5
+
5
6
  import MainReport from "@/components/MainReport";
6
7
  import SideBySide from "@/components/SideBySide";
7
8
  import TestResult from "@/components/TestResult";
@@ -10,6 +11,7 @@ import { rootTabRoute, testResultRoute } from "@/stores/router";
10
11
  import { currentTrId } from "@/stores/testResult";
11
12
  import { testResultStore } from "@/stores/testResults";
12
13
  import { treeStore } from "@/stores/tree";
14
+
13
15
  import * as styles from "./styles.scss";
14
16
 
15
17
  const MainReportWrapper = () => {
@@ -1,5 +1,7 @@
1
1
  import { SvgIcon, Text, allureIcons } from "@allurereport/web-components";
2
+
2
3
  import { useI18n } from "@/stores";
4
+
3
5
  import * as styles from "./styles.scss";
4
6
 
5
7
  const TrStepsEmpty = () => {
@@ -2,8 +2,10 @@ import type { AttachmentTestStepResult } from "@allurereport/core-api";
2
2
  import cx from "clsx";
3
3
  import type { FunctionalComponent } from "preact";
4
4
  import type { AwesomeTestResult } from "types";
5
+
5
6
  import { TrAttachment } from "@/components/TestResult/TrSteps/TrAttachment";
6
7
  import { useI18n } from "@/stores";
8
+
7
9
  import * as styles from "./styles.scss";
8
10
 
9
11
  export type TrAttachmentViewProps = {
@@ -2,17 +2,22 @@ import { proseStyles, resolveCssVarDeclarations, sanitizeIframeHtml, themeStore
2
2
  import type { FunctionalComponent } from "preact";
3
3
  import { useEffect, useMemo, useState } from "preact/hooks";
4
4
  import type { AwesomeTestResult } from "types";
5
+
5
6
  import { MetadataButton } from "@/components/MetadataButton";
7
+ import { collapsedTrees, toggleTree } from "@/stores/tree";
8
+
6
9
  import * as styles from "./styles.scss";
7
10
 
8
11
  export type TrDescriptionProps = {
12
+ id?: string;
9
13
  descriptionHtml: AwesomeTestResult["descriptionHtml"];
10
14
  };
11
15
 
12
16
  const MIN_HEIGHT = 120;
13
17
 
14
- export const TrDescription: FunctionalComponent<TrDescriptionProps> = ({ descriptionHtml }) => {
15
- const [isOpen, setIsOpen] = useState(true);
18
+ export const TrDescription: FunctionalComponent<TrDescriptionProps> = ({ id, descriptionHtml }) => {
19
+ const descriptionId = id !== null ? `${id}-description` : null;
20
+ const isOpen = !collapsedTrees.value.has(descriptionId);
16
21
  const [blobUrl, setBlobUrl] = useState("");
17
22
  const [height, setHeight] = useState(MIN_HEIGHT);
18
23
  const currentTheme = themeStore.value.current;
@@ -55,7 +60,15 @@ export const TrDescription: FunctionalComponent<TrDescriptionProps> = ({ descrip
55
60
  return (
56
61
  <div className={styles["test-result-description"]} data-testid="test-result-description">
57
62
  <div className={styles["test-result-description-wrapper"]}>
58
- <MetadataButton title="Description" setIsOpen={setIsOpen} isOpened={isOpen} />
63
+ <MetadataButton
64
+ title="Description"
65
+ setIsOpen={() => {
66
+ if (descriptionId !== null) {
67
+ toggleTree(descriptionId);
68
+ }
69
+ }}
70
+ isOpened={isOpen}
71
+ />
59
72
  {isOpen && (
60
73
  <div className={styles["test-result-description-text"]}>
61
74
  {blobUrl && (
@@ -2,6 +2,7 @@ import { ArrowButton, Counter, SvgIcon, Text, allureIcons } from "@allurereport/
2
2
  import type { ClassValue } from "clsx";
3
3
  import clsx from "clsx";
4
4
  import { type FunctionalComponent } from "preact";
5
+
5
6
  import * as styles from "./styles.scss";
6
7
 
7
8
  export const TrDropdown: FunctionalComponent<{
@@ -1,8 +1,10 @@
1
1
  import { SvgIcon, Text, allureIcons } from "@allurereport/web-components";
2
- import * as baseStyles from "@/components/BaseLayout/styles.scss";
2
+
3
3
  import { TrInfo } from "@/components/TestResult/TrInfo";
4
4
  import { useI18n } from "@/stores";
5
+
5
6
  import * as styles from "./styles.scss";
7
+ import * as baseStyles from "@/components/BaseLayout/styles.scss";
6
8
 
7
9
  const TrThumb = () => {
8
10
  const { t } = useI18n("empty");
@@ -3,11 +3,14 @@ import { ArrowButton, IconButton, Text, TooltipWrapper, TreeItemIcon, allureIcon
3
3
  import cx from "clsx";
4
4
  import { type FunctionalComponent } from "preact";
5
5
  import { useState } from "preact/hooks";
6
+
6
7
  import { TrError } from "@/components/TestResult/TrError";
7
8
  import { useI18n } from "@/stores";
8
9
  import { navigateToTestResult, openInNewTab } from "@/stores/router";
9
10
  import { timestampToDate } from "@/utils/time";
11
+
10
12
  import type { AwesomeTestResult } from "../../../../types";
13
+
11
14
  import * as styles from "./styles.scss";
12
15
 
13
16
  export const TrEnvironmentItem: FunctionalComponent<{