@allurereport/web-awesome 3.0.0-beta.8 → 3.0.0-beta.9
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/multi/{141.app-4375537b.js → 141.app-f32e4213.js} +1 -1
- package/dist/multi/{222.app-4375537b.js → 222.app-f32e4213.js} +1 -1
- package/dist/multi/{335.app-4375537b.js → 335.app-f32e4213.js} +1 -1
- package/dist/multi/{34.app-4375537b.js → 34.app-f32e4213.js} +1 -1
- package/dist/multi/{349.app-4375537b.js → 349.app-f32e4213.js} +1 -1
- package/dist/multi/{378.app-4375537b.js → 378.app-f32e4213.js} +1 -1
- package/dist/multi/{406.app-4375537b.js → 406.app-f32e4213.js} +1 -1
- package/dist/multi/{476.app-4375537b.js → 476.app-f32e4213.js} +1 -1
- package/dist/multi/{53.app-4375537b.js → 53.app-f32e4213.js} +1 -1
- package/dist/multi/{584.app-4375537b.js → 584.app-f32e4213.js} +1 -1
- package/dist/multi/{690.app-4375537b.js → 690.app-f32e4213.js} +1 -1
- package/dist/multi/{747.app-4375537b.js → 747.app-f32e4213.js} +1 -1
- package/dist/multi/{767.app-4375537b.js → 767.app-f32e4213.js} +1 -1
- package/dist/multi/{816.app-4375537b.js → 816.app-f32e4213.js} +1 -1
- package/dist/multi/{83.app-4375537b.js → 83.app-f32e4213.js} +1 -1
- package/dist/multi/{873.app-4375537b.js → 873.app-f32e4213.js} +1 -1
- package/dist/multi/{920.app-4375537b.js → 920.app-f32e4213.js} +1 -1
- package/dist/multi/{991.app-4375537b.js → 991.app-f32e4213.js} +1 -1
- package/dist/multi/app-f32e4213.js +2 -0
- package/dist/multi/manifest.json +20 -20
- package/dist/multi/{styles-4375537b.css → styles-f32e4213.css} +2 -1
- package/dist/single/app-7fa8e43f.js +2 -0
- package/dist/single/manifest.json +1 -1
- package/package.json +5 -4
- package/src/components/BaseLayout/index.tsx +1 -0
- package/src/components/ReportBody/Filters.tsx +1 -3
- package/src/components/ReportBody/index.tsx +4 -3
- package/src/components/Tabs/index.tsx +5 -0
- package/src/components/TestResult/TestResultEmpty/index.tsx +4 -3
- package/src/components/TestResult/TestResultOverview.tsx +7 -4
- package/src/components/TestResult/TestResultSetup/index.tsx +12 -3
- package/src/components/TestResult/TestResultSteps/index.tsx +12 -3
- package/src/components/TestResult/TestResultSteps/testResultStep.tsx +9 -2
- package/src/components/TestResult/TestResultTeardown/index.tsx +13 -3
- package/src/components/TestResult/TestStepsEmpty/index.tsx +23 -0
- package/src/components/TestResult/TestStepsEmpty/styles.scss +25 -0
- package/src/components/Tree/Tree.tsx +10 -3
- package/src/components/Tree/index.tsx +2 -10
- package/src/i18n/locales/am.json +3 -1
- package/src/i18n/locales/az.json +3 -1
- package/src/i18n/locales/de.json +3 -1
- package/src/i18n/locales/en.json +3 -1
- package/src/i18n/locales/es.json +3 -1
- package/src/i18n/locales/fr.json +3 -1
- package/src/i18n/locales/he.json +3 -1
- package/src/i18n/locales/it.json +3 -1
- package/src/i18n/locales/ja.json +3 -1
- package/src/i18n/locales/ka.json +3 -1
- package/src/i18n/locales/kr.json +3 -1
- package/src/i18n/locales/nl.json +3 -1
- package/src/i18n/locales/pl.json +3 -1
- package/src/i18n/locales/pt.json +3 -1
- package/src/i18n/locales/ru.json +3 -1
- package/src/i18n/locales/sv.json +3 -1
- package/src/i18n/locales/tr.json +3 -1
- package/src/i18n/locales/zh.json +3 -1
- package/src/index.html +1 -0
- package/src/stores/tree.ts +42 -11
- package/src/utils/loadFromLocalStorage.ts +8 -0
- package/types.d.ts +15 -2
- package/webpack.config.js +2 -0
- package/dist/multi/app-4375537b.js +0 -2
- package/dist/single/app-f16f6693.js +0 -2
- /package/dist/multi/{app-4375537b.js.LICENSE.txt → app-f32e4213.js.LICENSE.txt} +0 -0
- /package/dist/single/{app-f16f6693.js.LICENSE.txt → app-7fa8e43f.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allurereport/web-awesome",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.9",
|
|
4
4
|
"description": "The static files for Allure Awesome Report",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"allure",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"IE 11"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@allurereport/core-api": "3.0.0-beta.
|
|
35
|
-
"@allurereport/web-commons": "3.0.0-beta.
|
|
36
|
-
"@allurereport/web-components": "3.0.0-beta.
|
|
34
|
+
"@allurereport/core-api": "3.0.0-beta.9",
|
|
35
|
+
"@allurereport/web-commons": "3.0.0-beta.9",
|
|
36
|
+
"@allurereport/web-components": "3.0.0-beta.9",
|
|
37
37
|
"@preact/signals": "^1.3.0",
|
|
38
38
|
"clsx": "^2.1.1",
|
|
39
39
|
"d3-shape": "^3.2.0",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"@babel/preset-typescript": "^7.24.7",
|
|
51
51
|
"@eslint/js": "^9.10.0",
|
|
52
52
|
"@floating-ui/dom": "^1.6.12",
|
|
53
|
+
"@preact/compat": "^18.3.1",
|
|
53
54
|
"@stylistic/eslint-plugin": "^2.6.1",
|
|
54
55
|
"@types/babel__core": "^7.20.5",
|
|
55
56
|
"@types/d3-shape": "^3.1.6",
|
|
@@ -5,6 +5,7 @@ import { Footer } from "@/components/Footer";
|
|
|
5
5
|
import MainReport from "@/components/MainReport";
|
|
6
6
|
import Modal from "@/components/Modal";
|
|
7
7
|
import TestResult from "@/components/TestResult";
|
|
8
|
+
import TestResultEmpty from "@/components/TestResult/TestResultEmpty";
|
|
8
9
|
import { fetchStats, getLocale, getTheme } from "@/stores";
|
|
9
10
|
import { fetchPieChartData } from "@/stores/chart";
|
|
10
11
|
import { fetchEnvInfo } from "@/stores/envInfo";
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { Button, allureIcons } from "@allurereport/web-components";
|
|
2
|
-
import { Menu } from "@allurereport/web-components";
|
|
3
|
-
import { Toggle } from "@allurereport/web-components";
|
|
1
|
+
import { Button, Menu, Toggle, allureIcons } from "@allurereport/web-components";
|
|
4
2
|
import { useI18n } from "@/stores/locale";
|
|
5
3
|
import { setTreeFilter, treeFiltersStore } from "@/stores/tree";
|
|
6
4
|
import * as styles from "./styles.scss";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { statusesList } from "@allurereport/core-api";
|
|
2
|
-
import { Loadable } from "@allurereport/web-components";
|
|
3
|
-
import { Counter } from "@allurereport/web-components";
|
|
2
|
+
import { Counter, Loadable } from "@allurereport/web-components";
|
|
4
3
|
import { statsStore } from "@/stores";
|
|
5
4
|
import { useI18n } from "@/stores/locale";
|
|
5
|
+
import { treeFiltersStore } from "@/stores/tree";
|
|
6
6
|
import { capitalize } from "@/utils/capitalize";
|
|
7
7
|
import { Tab, Tabs, TabsList } from "../Tabs";
|
|
8
8
|
import { TreeList } from "../Tree";
|
|
@@ -58,10 +58,11 @@ const Body = () => {
|
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
export const ReportBody = () => {
|
|
61
|
+
const initialTab = treeFiltersStore.value.status;
|
|
61
62
|
return (
|
|
62
63
|
<ReportContentProvider>
|
|
63
64
|
<section>
|
|
64
|
-
<Tabs initialTab=
|
|
65
|
+
<Tabs initialTab={initialTab}>
|
|
65
66
|
<Header />
|
|
66
67
|
<Body />
|
|
67
68
|
</Tabs>
|
|
@@ -1,6 +1,8 @@
|
|
|
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
|
+
import { setTreeStatus } from "@/stores/tree";
|
|
5
|
+
import type { AllureAwesomeStatus } from "../../../types";
|
|
4
6
|
import * as styles from "./styles.scss";
|
|
5
7
|
|
|
6
8
|
type TabsContextT = {
|
|
@@ -41,10 +43,13 @@ export const Tab = (props: { id: string; children: ComponentChildren }) => {
|
|
|
41
43
|
const isCurrentTab = currentTab === id;
|
|
42
44
|
const handleTabClick = () => {
|
|
43
45
|
if (isCurrentTab) {
|
|
46
|
+
setCurrentTab("total");
|
|
47
|
+
setTreeStatus("total");
|
|
44
48
|
return;
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
setCurrentTab(id);
|
|
52
|
+
setTreeStatus(id as AllureAwesomeStatus);
|
|
48
53
|
};
|
|
49
54
|
|
|
50
55
|
return (
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { SvgIcon, allureIcons } from "@allurereport/web-components";
|
|
2
|
-
import { Text } from "@allurereport/web-components";
|
|
1
|
+
import { SvgIcon, Text, allureIcons } from "@allurereport/web-components";
|
|
3
2
|
import * as baseStyles from "@/components/BaseLayout/styles.scss";
|
|
4
3
|
import { TestResultInfo } from "@/components/TestResult/TestResultInfo";
|
|
4
|
+
import { useI18n } from "@/stores";
|
|
5
5
|
import * as styles from "./styles.scss";
|
|
6
6
|
|
|
7
7
|
const TestResultThumb = () => {
|
|
8
|
+
const { t } = useI18n("empty");
|
|
8
9
|
return (
|
|
9
10
|
<div className={styles["test-result-thumb"]}>
|
|
10
11
|
<div className={styles["test-result-thumb-wrapper"]}>
|
|
@@ -15,7 +16,7 @@ const TestResultThumb = () => {
|
|
|
15
16
|
id={allureIcons.lineDevCodeSquare}
|
|
16
17
|
className={styles["test-result-thumb-icon"]}
|
|
17
18
|
/>
|
|
18
|
-
<Text className={styles["test-result-thumb-text"]}>
|
|
19
|
+
<Text className={styles["test-result-thumb-text"]}>{t("no-test-case-results")}</Text>
|
|
19
20
|
</div>
|
|
20
21
|
</div>
|
|
21
22
|
);
|
|
@@ -9,13 +9,15 @@ import { TestResultParameters } from "@/components/TestResult/TestResultParamete
|
|
|
9
9
|
import { TestResultSetup } from "@/components/TestResult/TestResultSetup";
|
|
10
10
|
import { TestResultSteps } from "@/components/TestResult/TestResultSteps";
|
|
11
11
|
import { TestResultTeardown } from "@/components/TestResult/TestResultTeardown";
|
|
12
|
+
import TestStepsEmpty from "@/components/TestResult/TestStepsEmpty";
|
|
12
13
|
|
|
13
14
|
export type TestResultOverviewProps = {
|
|
14
15
|
testResult?: AllureAwesomeTestResult;
|
|
15
16
|
};
|
|
16
17
|
|
|
17
18
|
export const TestResultOverview: FunctionalComponent<TestResultOverviewProps> = ({ testResult }) => {
|
|
18
|
-
const { error, parameters, groupedLabels, links, description, setup, steps, teardown } = testResult || {};
|
|
19
|
+
const { error, parameters, groupedLabels, links, description, setup, steps, teardown, id } = testResult || {};
|
|
20
|
+
const isNoSteps = !setup?.length && !steps.length && !teardown.length;
|
|
19
21
|
|
|
20
22
|
return (
|
|
21
23
|
<>
|
|
@@ -31,9 +33,10 @@ export const TestResultOverview: FunctionalComponent<TestResultOverviewProps> =
|
|
|
31
33
|
{Boolean(links?.length) && <TestResultLinks links={links} />}
|
|
32
34
|
{Boolean(description) && <TestResultDescription description={description} />}
|
|
33
35
|
<div className={styles["test-results"]}>
|
|
34
|
-
{
|
|
35
|
-
{Boolean(
|
|
36
|
-
{Boolean(
|
|
36
|
+
{isNoSteps && <TestStepsEmpty />}
|
|
37
|
+
{Boolean(setup?.length) && <TestResultSetup id={id} setup={setup} />}
|
|
38
|
+
{Boolean(steps?.length) && <TestResultSteps id={id} steps={steps} />}
|
|
39
|
+
{Boolean(teardown?.length) && <TestResultTeardown id={id} teardown={teardown} />}
|
|
37
40
|
</div>
|
|
38
41
|
</>
|
|
39
42
|
);
|
|
@@ -7,6 +7,7 @@ import * as styles from "@/components/TestResult/TestResultSteps/styles.scss";
|
|
|
7
7
|
import { TestResultAttachment } from "@/components/TestResult/TestResultSteps/testResultAttachment";
|
|
8
8
|
import { TestResultStep } from "@/components/TestResult/TestResultSteps/testResultStep";
|
|
9
9
|
import { useI18n } from "@/stores/locale";
|
|
10
|
+
import { collapsedTrees, toggleTree } from "@/stores/tree";
|
|
10
11
|
|
|
11
12
|
const typeMap = {
|
|
12
13
|
before: TestResultStep,
|
|
@@ -17,10 +18,18 @@ const typeMap = {
|
|
|
17
18
|
|
|
18
19
|
export type TestResultSetupProps = {
|
|
19
20
|
setup: AllureAwesomeTestResult["setup"];
|
|
21
|
+
id?: string;
|
|
20
22
|
};
|
|
21
23
|
|
|
22
|
-
export const TestResultSetup: FunctionalComponent<TestResultSetupProps> = ({ setup }) => {
|
|
23
|
-
const
|
|
24
|
+
export const TestResultSetup: FunctionalComponent<TestResultSetupProps> = ({ setup, id }) => {
|
|
25
|
+
const teardownId = `${id}-setup`;
|
|
26
|
+
const isEarlyCollapsed = Boolean(!collapsedTrees.value.has(teardownId));
|
|
27
|
+
const [isOpened, setIsOpen] = useState<boolean>(isEarlyCollapsed);
|
|
28
|
+
|
|
29
|
+
const handleClick = () => {
|
|
30
|
+
setIsOpen(!isOpened);
|
|
31
|
+
toggleTree(teardownId);
|
|
32
|
+
};
|
|
24
33
|
const { t } = useI18n("execution");
|
|
25
34
|
|
|
26
35
|
return (
|
|
@@ -28,7 +37,7 @@ export const TestResultSetup: FunctionalComponent<TestResultSetupProps> = ({ set
|
|
|
28
37
|
<TestResultDropdown
|
|
29
38
|
icon={allureIcons.lineTimeClockStopwatch}
|
|
30
39
|
isOpened={isOpened}
|
|
31
|
-
setIsOpen={
|
|
40
|
+
setIsOpen={handleClick}
|
|
32
41
|
counter={setup?.length}
|
|
33
42
|
title={t("setup")}
|
|
34
43
|
/>
|
|
@@ -6,6 +6,7 @@ import { TestResultDropdown } from "@/components/TestResult/TestResultDropdown";
|
|
|
6
6
|
import { TestResultAttachment } from "@/components/TestResult/TestResultSteps/testResultAttachment";
|
|
7
7
|
import { TestResultStep } from "@/components/TestResult/TestResultSteps/testResultStep";
|
|
8
8
|
import { useI18n } from "@/stores/locale";
|
|
9
|
+
import { collapsedTrees, toggleTree } from "@/stores/tree";
|
|
9
10
|
import * as styles from "./styles.scss";
|
|
10
11
|
|
|
11
12
|
const typeMap = {
|
|
@@ -15,6 +16,7 @@ const typeMap = {
|
|
|
15
16
|
|
|
16
17
|
export type TestResultStepsProps = {
|
|
17
18
|
steps: AllureAwesomeTestResult["steps"];
|
|
19
|
+
id?: string;
|
|
18
20
|
};
|
|
19
21
|
|
|
20
22
|
type StepComponentProps = FunctionalComponent<{
|
|
@@ -22,8 +24,15 @@ type StepComponentProps = FunctionalComponent<{
|
|
|
22
24
|
stepIndex?: number;
|
|
23
25
|
}>;
|
|
24
26
|
|
|
25
|
-
export const TestResultSteps: FunctionalComponent<TestResultStepsProps> = ({ steps }) => {
|
|
26
|
-
const
|
|
27
|
+
export const TestResultSteps: FunctionalComponent<TestResultStepsProps> = ({ steps, id }) => {
|
|
28
|
+
const stepsId = `${id}-steps`;
|
|
29
|
+
const isEarlyCollapsed = Boolean(!collapsedTrees.value.has(stepsId));
|
|
30
|
+
const [isOpened, setIsOpen] = useState<boolean>(isEarlyCollapsed);
|
|
31
|
+
|
|
32
|
+
const handleClick = () => {
|
|
33
|
+
setIsOpen(!isOpened);
|
|
34
|
+
toggleTree(stepsId);
|
|
35
|
+
};
|
|
27
36
|
|
|
28
37
|
const { t } = useI18n("execution");
|
|
29
38
|
return (
|
|
@@ -31,7 +40,7 @@ export const TestResultSteps: FunctionalComponent<TestResultStepsProps> = ({ ste
|
|
|
31
40
|
<TestResultDropdown
|
|
32
41
|
icon={allureIcons.lineHelpersPlayCircle}
|
|
33
42
|
isOpened={isOpened}
|
|
34
|
-
setIsOpen={
|
|
43
|
+
setIsOpen={handleClick}
|
|
35
44
|
counter={steps?.length}
|
|
36
45
|
title={t("body")}
|
|
37
46
|
/>
|
|
@@ -9,6 +9,7 @@ import * as styles from "@/components/TestResult/TestResultSteps/styles.scss";
|
|
|
9
9
|
import { TestResultAttachment } from "@/components/TestResult/TestResultSteps/testResultAttachment";
|
|
10
10
|
import { TestResultStepInfo } from "@/components/TestResult/TestResultSteps/testResultStepInfo";
|
|
11
11
|
import TreeItemIcon from "@/components/Tree/TreeItemIcon";
|
|
12
|
+
import { collapsedTrees, toggleTree } from "@/stores/tree";
|
|
12
13
|
|
|
13
14
|
export const TestResultStepParameters = (props: { parameters: DefaultTestStepResult["parameters"] }) => {
|
|
14
15
|
const { parameters } = props;
|
|
@@ -49,12 +50,18 @@ export const TestResultStep: FunctionComponent<{
|
|
|
49
50
|
stepIndex?: number;
|
|
50
51
|
className?: string;
|
|
51
52
|
}> = ({ item, stepIndex }) => {
|
|
52
|
-
const
|
|
53
|
+
const isEarlyOpened = collapsedTrees.value.has(item.stepId);
|
|
54
|
+
const [isOpened, setIsOpen] = useState(isEarlyOpened || false);
|
|
53
55
|
const hasContent = Boolean(item?.steps?.length || item?.parameters?.length);
|
|
54
56
|
|
|
57
|
+
const handleClick = () => {
|
|
58
|
+
setIsOpen(!isOpened);
|
|
59
|
+
toggleTree(item.stepId);
|
|
60
|
+
};
|
|
61
|
+
|
|
55
62
|
return (
|
|
56
63
|
<div className={styles["test-result-step"]}>
|
|
57
|
-
<div className={styles["test-result-step-header"]} onClick={
|
|
64
|
+
<div className={styles["test-result-step-header"]} onClick={handleClick}>
|
|
58
65
|
{!hasContent ? (
|
|
59
66
|
<div className={styles["test-result-strut"]} />
|
|
60
67
|
) : (
|
|
@@ -7,6 +7,7 @@ import * as styles from "@/components/TestResult/TestResultSteps/styles.scss";
|
|
|
7
7
|
import { TestResultAttachment } from "@/components/TestResult/TestResultSteps/testResultAttachment";
|
|
8
8
|
import { TestResultStep } from "@/components/TestResult/TestResultSteps/testResultStep";
|
|
9
9
|
import { useI18n } from "@/stores/locale";
|
|
10
|
+
import { collapsedTrees, toggleTree } from "@/stores/tree";
|
|
10
11
|
|
|
11
12
|
const typeMap = {
|
|
12
13
|
before: TestResultStep,
|
|
@@ -17,10 +18,19 @@ const typeMap = {
|
|
|
17
18
|
|
|
18
19
|
export type TestResultTeardownProps = {
|
|
19
20
|
teardown: AllureAwesomeTestResult["teardown"];
|
|
21
|
+
id: string;
|
|
20
22
|
};
|
|
21
23
|
|
|
22
|
-
export const TestResultTeardown: FunctionalComponent<TestResultTeardownProps> = ({ teardown }) => {
|
|
23
|
-
const
|
|
24
|
+
export const TestResultTeardown: FunctionalComponent<TestResultTeardownProps> = ({ teardown, id }) => {
|
|
25
|
+
const teardownId = `${id}-teardown`;
|
|
26
|
+
const isEarlyCollapsed = !collapsedTrees.value.has(teardownId);
|
|
27
|
+
const [isOpened, setIsOpen] = useState<boolean>(isEarlyCollapsed);
|
|
28
|
+
|
|
29
|
+
const handleClick = () => {
|
|
30
|
+
setIsOpen(!isOpened);
|
|
31
|
+
toggleTree(teardownId);
|
|
32
|
+
};
|
|
33
|
+
|
|
24
34
|
const { t } = useI18n("execution");
|
|
25
35
|
|
|
26
36
|
return (
|
|
@@ -28,7 +38,7 @@ export const TestResultTeardown: FunctionalComponent<TestResultTeardownProps> =
|
|
|
28
38
|
<TestResultDropdown
|
|
29
39
|
icon={allureIcons.lineHelpersFlag}
|
|
30
40
|
isOpened={isOpened}
|
|
31
|
-
setIsOpen={
|
|
41
|
+
setIsOpen={handleClick}
|
|
32
42
|
counter={teardown?.length}
|
|
33
43
|
title={t("teardown")}
|
|
34
44
|
/>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SvgIcon, Text, allureIcons } from "@allurereport/web-components";
|
|
2
|
+
import { useI18n } from "@/stores";
|
|
3
|
+
import * as styles from "./styles.scss";
|
|
4
|
+
|
|
5
|
+
const TestStepsEmpty = () => {
|
|
6
|
+
const { t } = useI18n("empty");
|
|
7
|
+
return (
|
|
8
|
+
<div className={styles["test-steps-empty"]}>
|
|
9
|
+
<div className={styles["test-steps-empty-wrapper"]}>
|
|
10
|
+
<SvgIcon
|
|
11
|
+
size={"m"}
|
|
12
|
+
width={"32px"}
|
|
13
|
+
height={"32px"}
|
|
14
|
+
id={allureIcons.lineDevCodeSquare}
|
|
15
|
+
className={styles["test-steps-empty-icon"]}
|
|
16
|
+
/>
|
|
17
|
+
<Text className={styles["test-steps-empty-text"]}>{t("no-test-steps-results")}</Text>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default TestStepsEmpty;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.test-steps-empty {
|
|
2
|
+
display: flex;
|
|
3
|
+
justify-content: center;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
min-height: 320px;
|
|
6
|
+
align-items: center;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.test-steps-empty-wrapper {
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
align-items: center;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.test-steps-empty-icon {
|
|
16
|
+
width: 32px;
|
|
17
|
+
height: 32px;
|
|
18
|
+
margin-bottom: 16px;
|
|
19
|
+
flex: 1 1 auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.test-steps-empty-text {
|
|
23
|
+
color: var(--on-text-secondary);
|
|
24
|
+
flex: 1 1 auto;
|
|
25
|
+
}
|
|
@@ -4,6 +4,7 @@ import type { FunctionComponent } from "preact";
|
|
|
4
4
|
import { useState } from "preact/hooks";
|
|
5
5
|
import type { AllureAwesomeRecursiveTree, AllureAwesomeStatus } from "types";
|
|
6
6
|
import TreeItem from "@/components/Tree/TreeItem";
|
|
7
|
+
import { collapsedTrees, toggleTree } from "@/stores/tree";
|
|
7
8
|
import TreeHeader from "./TreeHeader";
|
|
8
9
|
import * as styles from "./styles.scss";
|
|
9
10
|
|
|
@@ -16,9 +17,13 @@ interface TreeProps {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
const Tree: FunctionComponent<TreeProps> = ({ tree, statusFilter, root, name, statistic }) => {
|
|
19
|
-
const
|
|
20
|
-
const
|
|
20
|
+
const isEarlyCollapsed = collapsedTrees.value.has(tree.nodeId);
|
|
21
|
+
const haveFailedSteps = statistic === undefined || !!statistic?.failed || !!statistic?.broken;
|
|
22
|
+
const [isOpened, setIsOpen] = useState(() => (isEarlyCollapsed ? !haveFailedSteps : haveFailedSteps));
|
|
23
|
+
|
|
24
|
+
const toggleTreeHeader = () => {
|
|
21
25
|
setIsOpen(!isOpened);
|
|
26
|
+
toggleTree(tree.nodeId);
|
|
22
27
|
};
|
|
23
28
|
const emptyTree = !tree?.trees?.length && !tree?.leaves?.length;
|
|
24
29
|
|
|
@@ -59,7 +64,9 @@ const Tree: FunctionComponent<TreeProps> = ({ tree, statusFilter, root, name, st
|
|
|
59
64
|
|
|
60
65
|
return (
|
|
61
66
|
<div className={styles.tree}>
|
|
62
|
-
{name &&
|
|
67
|
+
{name && (
|
|
68
|
+
<TreeHeader categoryTitle={name} isOpened={isOpened} toggleTree={toggleTreeHeader} statistic={statistic} />
|
|
69
|
+
)}
|
|
63
70
|
{treeContent}
|
|
64
71
|
</div>
|
|
65
72
|
);
|
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
import { Button } from "@allurereport/web-components";
|
|
2
|
-
import { Loadable } from "@allurereport/web-components";
|
|
3
|
-
import { PageLoader } from "@allurereport/web-components";
|
|
4
|
-
import { Text } from "@allurereport/web-components";
|
|
5
|
-
import { useEffect } from "preact/hooks";
|
|
1
|
+
import { Button, Loadable, PageLoader, Text } from "@allurereport/web-components";
|
|
6
2
|
import type { AllureAwesomeStatus } from "types";
|
|
7
3
|
import { useTabsContext } from "@/components/Tabs";
|
|
8
4
|
import Tree from "@/components/Tree/Tree";
|
|
9
5
|
import { useI18n } from "@/stores/locale";
|
|
10
|
-
import { clearTreeFilters, filteredTree, noTests, noTestsFound,
|
|
6
|
+
import { clearTreeFilters, filteredTree, noTests, noTestsFound, treeStore } from "@/stores/tree";
|
|
11
7
|
import * as styles from "./styles.scss";
|
|
12
8
|
|
|
13
9
|
export const TreeList = () => {
|
|
14
10
|
const { t } = useI18n("empty");
|
|
15
11
|
const { currentTab } = useTabsContext();
|
|
16
12
|
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
setTreeStatus(currentTab as AllureAwesomeStatus);
|
|
19
|
-
}, [currentTab]);
|
|
20
|
-
|
|
21
13
|
return (
|
|
22
14
|
<Loadable
|
|
23
15
|
source={treeStore}
|
package/src/i18n/locales/am.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Մաքրել ֆիլտրները",
|
|
66
66
|
"no-attachments-results": "Կցորդների մասին տեղեկություններ չկան",
|
|
67
67
|
"no-history-results": "Պատմության մասին տեղեկություններ չկան",
|
|
68
|
-
"no-retries-results": "Կրկնությունների մասին տեղեկություններ չկան"
|
|
68
|
+
"no-retries-results": "Կրկնությունների մասին տեղեկություններ չկան",
|
|
69
|
+
"no-test-steps-results": "Թեստի քայլերի մասին տեղեկատվությունը հասանելի չէ։",
|
|
70
|
+
"no-test-case-results": "Թեստի դեպքերի արդյունքներ չկան։"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "արգելափակում",
|
package/src/i18n/locales/az.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Filtrləri təmizlə",
|
|
66
66
|
"no-attachments-results": "Əlavə məlumatı mövcud deyil",
|
|
67
67
|
"no-history-results": "Tarixçə məlumatı mövcud deyil",
|
|
68
|
-
"no-retries-results": "Təkrar məlumatı mövcud deyil"
|
|
68
|
+
"no-retries-results": "Təkrar məlumatı mövcud deyil",
|
|
69
|
+
"no-test-steps-results": "Test addımları haqqında məlumat mövcud deyil",
|
|
70
|
+
"no-test-case-results": "Test halları haqqında nəticələr yoxdur"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "bloklayıcı",
|
package/src/i18n/locales/de.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Filter löschen",
|
|
66
66
|
"no-attachments-results": "Keine Anhängeinformationen verfügbar",
|
|
67
67
|
"no-history-results": "Keine Verlaufsinformationen verfügbar",
|
|
68
|
-
"no-retries-results": "Keine Wiederholungsinformationen verfügbar"
|
|
68
|
+
"no-retries-results": "Keine Wiederholungsinformationen verfügbar",
|
|
69
|
+
"no-test-steps-results": "Keine Informationen zu Testschritten verfügbar",
|
|
70
|
+
"no-test-case-results": "Keine Testergebnisse verfügbar"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "Blocker",
|
package/src/i18n/locales/en.json
CHANGED
|
@@ -66,7 +66,9 @@
|
|
|
66
66
|
"clear-filters": "Clear filters",
|
|
67
67
|
"no-attachments-results": "No attachments information available",
|
|
68
68
|
"no-history-results": "No history information available",
|
|
69
|
-
"no-retries-results": "No retries information available"
|
|
69
|
+
"no-retries-results": "No retries information available",
|
|
70
|
+
"no-test-steps-results": "No test steps information available",
|
|
71
|
+
"no-test-case-results": "No test case results"
|
|
70
72
|
},
|
|
71
73
|
"severity": {
|
|
72
74
|
"blocker": "blocker",
|
package/src/i18n/locales/es.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Limpiar filtros",
|
|
66
66
|
"no-attachments-results": "No hay información de adjuntos disponible",
|
|
67
67
|
"no-history-results": "No hay información de historial disponible",
|
|
68
|
-
"no-retries-results": "No hay información de reintentos disponible"
|
|
68
|
+
"no-retries-results": "No hay información de reintentos disponible",
|
|
69
|
+
"no-test-steps-results": "No hay información disponible sobre los pasos de prueba",
|
|
70
|
+
"no-test-case-results": "No hay resultados de casos de prueba"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "bloqueante",
|
package/src/i18n/locales/fr.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Effacer les filtres",
|
|
66
66
|
"no-attachments-results": "Aucune information sur les pièces jointes disponible",
|
|
67
67
|
"no-history-results": "Aucune information sur l'historique disponible",
|
|
68
|
-
"no-retries-results": "Aucune information sur les réessais disponible"
|
|
68
|
+
"no-retries-results": "Aucune information sur les réessais disponible",
|
|
69
|
+
"no-test-steps-results": "Aucune information sur les étapes de test disponible",
|
|
70
|
+
"no-test-case-results": "Aucun résultat de cas de test"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "bloquant",
|
package/src/i18n/locales/he.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "נקה מסננים",
|
|
66
66
|
"no-attachments-results": "לא נמצאה מידע על קבצים מצורפים",
|
|
67
67
|
"no-history-results": "לא נמצאה מידע על היסטוריה",
|
|
68
|
-
"no-retries-results": "לא נמצאה מידע על נסיונות חוזרים"
|
|
68
|
+
"no-retries-results": "לא נמצאה מידע על נסיונות חוזרים",
|
|
69
|
+
"no-test-steps-results": "אין מידע על שלבי הבדיקה",
|
|
70
|
+
"no-test-case-results": "אין תוצאות של מקרי בדיקה"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "חוסם",
|
package/src/i18n/locales/it.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Cancella i filtri",
|
|
66
66
|
"no-attachments-results": "Nessuna informazione sugli allegati disponibile",
|
|
67
67
|
"no-history-results": "Nessuna informazione sulla cronologia disponibile",
|
|
68
|
-
"no-retries-results": "Nessuna informazione sui ritentativi disponibile"
|
|
68
|
+
"no-retries-results": "Nessuna informazione sui ritentativi disponibile",
|
|
69
|
+
"no-test-steps-results": "Nessuna informazione disponibile sui passaggi del test",
|
|
70
|
+
"no-test-case-results": "Nessun risultato dei casi di test"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "bloccante",
|
package/src/i18n/locales/ja.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "フィルターをクリア",
|
|
66
66
|
"no-attachments-results": "添付ファイル情報が利用できません",
|
|
67
67
|
"no-history-results": "履歴情報が利用できません",
|
|
68
|
-
"no-retries-results": "再試行情報が利用できません"
|
|
68
|
+
"no-retries-results": "再試行情報が利用できません",
|
|
69
|
+
"no-test-steps-results": "テスト手順の情報は利用できません",
|
|
70
|
+
"no-test-case-results": "テストケースの結果がありません"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "ブロッカー",
|
package/src/i18n/locales/ka.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "ფილტრების გასუფთავება",
|
|
66
66
|
"no-attachments-results": "დანართების ინფორმაცია არ არის ხელმისაწვდომი",
|
|
67
67
|
"no-history-results": "ისტორიის ინფორმაცია არ არის ხელმისაწვდომი",
|
|
68
|
-
"no-retries-results": "ხელახალი ცდების ინფორმ���ცია არ არის ხელმისაწვდომი"
|
|
68
|
+
"no-retries-results": "ხელახალი ცდების ინფორმ���ცია არ არის ხელმისაწვდომი",
|
|
69
|
+
"no-test-steps-results": "ტესტის ნაბიჯების ინფორმაცია ხელმისაწვდომი არ არის",
|
|
70
|
+
"no-test-case-results": "ტესტის შემთხვევის შედეგები არ არის"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "ბლოკერი",
|
package/src/i18n/locales/kr.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "필터 지우기",
|
|
66
66
|
"no-attachments-results": "첨부파일 정보를 사용할 수 없습니다",
|
|
67
67
|
"no-history-results": "기록 정보를 사용할 수 없습니다",
|
|
68
|
-
"no-retries-results": "재시도 정보를 사용할 수 없습니다"
|
|
68
|
+
"no-retries-results": "재시도 정보를 사용할 수 없습니다",
|
|
69
|
+
"no-test-steps-results": "테스트 단계 정보가 없습니다",
|
|
70
|
+
"no-test-case-results": "테스트 케이스 결과가 없습니다"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "차단자",
|
package/src/i18n/locales/nl.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Filters wissen",
|
|
66
66
|
"no-attachments-results": "Geen bijlageninformatie beschikbaar",
|
|
67
67
|
"no-history-results": "Geen geschiedenisinformatie beschikbaar",
|
|
68
|
-
"no-retries-results": "Geen herhalingsinformatie beschikbaar"
|
|
68
|
+
"no-retries-results": "Geen herhalingsinformatie beschikbaar",
|
|
69
|
+
"no-test-steps-results": "Geen informatie over teststappen beschikbaar",
|
|
70
|
+
"no-test-case-results": "Geen testresultaten"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "blokkerend",
|
package/src/i18n/locales/pl.json
CHANGED
|
@@ -62,7 +62,9 @@
|
|
|
62
62
|
"clear-filters": "Wyczyść filtry",
|
|
63
63
|
"no-attachments-results": "Brak dostępnych informacji o załącznikach",
|
|
64
64
|
"no-history-results": "Brak dostępnych informacji o historii",
|
|
65
|
-
"no-retries-results": "Brak dostępnych informacji o ponownych próbach"
|
|
65
|
+
"no-retries-results": "Brak dostępnych informacji o ponownych próbach",
|
|
66
|
+
"no-test-steps-results": "Brak dostępnych informacji o krokach testowych",
|
|
67
|
+
"no-test-case-results": "Brak wyników przypadków testowych"
|
|
66
68
|
},
|
|
67
69
|
"severity": {
|
|
68
70
|
"name": "Ważność",
|
package/src/i18n/locales/pt.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Limpar filtros",
|
|
66
66
|
"no-attachments-results": "Nenhuma informação de anexos disponível",
|
|
67
67
|
"no-history-results": "Nenhuma informação de histórico disponível",
|
|
68
|
-
"no-retries-results": "Nenhuma informação de repetições disponível"
|
|
68
|
+
"no-retries-results": "Nenhuma informação de repetições disponível",
|
|
69
|
+
"no-test-steps-results": "Nenhuma informação disponível sobre as etapas do teste",
|
|
70
|
+
"no-test-case-results": "Nenhum resultado de caso de teste"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "bloqueador",
|
package/src/i18n/locales/ru.json
CHANGED
|
@@ -62,7 +62,9 @@
|
|
|
62
62
|
"clear-filters": "Очистить фильтры",
|
|
63
63
|
"no-attachments-results": "Информация о вложениях отсутствует",
|
|
64
64
|
"no-history-results": "Информация об истории отсутствует",
|
|
65
|
-
"no-retries-results": "Информация о перезапусках отсутствует"
|
|
65
|
+
"no-retries-results": "Информация о перезапусках отсутствует",
|
|
66
|
+
"no-test-steps-results": "Нет информации о шагах тестирования",
|
|
67
|
+
"no-test-case-results": "Нет результатов тест-кейсов"
|
|
66
68
|
},
|
|
67
69
|
"severity": {
|
|
68
70
|
"name": "Важность",
|
package/src/i18n/locales/sv.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Rensa filter",
|
|
66
66
|
"no-attachments-results": "Ingen bilaga information tillgänglig",
|
|
67
67
|
"no-history-results": "Ingen historik information tillgänglig",
|
|
68
|
-
"no-retries-results": "Ingen omtagningar information tillgänglig"
|
|
68
|
+
"no-retries-results": "Ingen omtagningar information tillgänglig",
|
|
69
|
+
"no-test-steps-results": "Ingen information om teststeg tillgänglig",
|
|
70
|
+
"no-test-case-results": "Inga testfallresultat"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "blockerare",
|
package/src/i18n/locales/tr.json
CHANGED
|
@@ -65,7 +65,9 @@
|
|
|
65
65
|
"clear-filters": "Filtreleri temizle",
|
|
66
66
|
"no-attachments-results": "Ek bilgisi mevcut değil",
|
|
67
67
|
"no-history-results": "Geçmiş bilgisi mevcut değil",
|
|
68
|
-
"no-retries-results": "Tekrar deneme bilgisi mevcut değil"
|
|
68
|
+
"no-retries-results": "Tekrar deneme bilgisi mevcut değil",
|
|
69
|
+
"no-test-steps-results": "Test adımları hakkında bilgi mevcut değil",
|
|
70
|
+
"no-test-case-results": "Test vakası sonuçları yok"
|
|
69
71
|
},
|
|
70
72
|
"severity": {
|
|
71
73
|
"blocker": "engelleyici",
|