diff --git a/dashboard/src/components/Cards/BaseCard.tsx b/dashboard/src/components/Cards/BaseCard.tsx
index 500faeb..4f8a030 100644
--- a/dashboard/src/components/Cards/BaseCard.tsx
+++ b/dashboard/src/components/Cards/BaseCard.tsx
@@ -8,7 +8,7 @@ interface IBaseCard {
}
const containerClassName =
- 'flex flex-col rounded-xl bg-white w-full h-fit border border-darkGray text-black';
+ 'flex flex-col rounded-xl bg-white w-full h-fit border border-darkGray text-black break-inside-avoid-column mb-6';
const BaseCard = ({ title, content, className }: IBaseCard): JSX.Element => {
return (
diff --git a/dashboard/src/components/CardsGroup/CardsGroup.tsx b/dashboard/src/components/CardsGroup/CardsGroup.tsx
index 5a26b7b..d38b837 100644
--- a/dashboard/src/components/CardsGroup/CardsGroup.tsx
+++ b/dashboard/src/components/CardsGroup/CardsGroup.tsx
@@ -5,13 +5,14 @@ import BaseCard from '../Cards/BaseCard';
import ListingContent, {
IListingContent,
} from '../ListingContent/ListingContent';
+import StatusChartMemoized, { IStatusChart } from '../StatusChart/StatusCharts';
interface ICardsGroup {
- cards: (IListingContent | ISummary)[];
+ cards: (IListingContent | ISummary | IStatusChart)[];
}
interface ICardContent {
- card: IListingContent | ISummary;
+ card: IListingContent | ISummary | IStatusChart;
}
const CardsGroup = ({ cards }: ICardsGroup): JSX.Element => {
@@ -24,7 +25,7 @@ const CardsGroup = ({ cards }: ICardsGroup): JSX.Element => {
/>
));
}, [cards]);
- return
{cardsList}
;
+ return {cardsList}
;
};
const CardContent = ({ card }: ICardContent): JSX.Element => {
@@ -38,6 +39,8 @@ const CardContent = ({ card }: ICardContent): JSX.Element => {
summaryBody={card?.summaryBody}
/>
);
+ } else if (card.type === 'chart') {
+ return ;
} else {
return <>>;
}
diff --git a/dashboard/src/locales/messages/index.ts b/dashboard/src/locales/messages/index.ts
index d84cd9f..7151176 100644
--- a/dashboard/src/locales/messages/index.ts
+++ b/dashboard/src/locales/messages/index.ts
@@ -21,8 +21,10 @@ export const messages = {
arch: 'Arch',
boots: 'Boots',
builds: 'Builds',
+ buildStatus: 'Build status',
configs: 'Configs',
compiler: 'Compiler',
+ executed: 'Executed',
summary: 'Summary',
tests: 'Tests',
},
diff --git a/dashboard/src/routes/TreeDetails/TreeDetails.tsx b/dashboard/src/routes/TreeDetails/TreeDetails.tsx
index 39fedb6..7c45fc2 100644
--- a/dashboard/src/routes/TreeDetails/TreeDetails.tsx
+++ b/dashboard/src/routes/TreeDetails/TreeDetails.tsx
@@ -13,13 +13,20 @@ import { useTreeDetails } from '@/api/TreeDetails';
import { IListingItem } from '@/components/ListingItem/ListingItem';
import { ISummaryItem } from '@/components/Summary/Summary';
import CardsGroup from '@/components/CardsGroup/CardsGroup';
+import { Colors } from '@/components/StatusChart/StatusCharts';
+import { Results } from '@/types/tree/TreeDetails';
+
+interface ITreeDetails {
+ archs: ISummaryItem[];
+ configs: IListingItem[];
+ builds: Results;
+}
const TreeDetails = (): JSX.Element => {
const { treeId } = useParams();
const { data } = useTreeDetails(treeId ?? '');
- const [configs, setConfigs] = useState();
- const [archictectures, setArchitectures] = useState();
+ const [treeDetailsData, setTreeDetailsData] = useState();
useEffect(() => {
if (data) {
@@ -30,7 +37,6 @@ const TreeDetails = (): JSX.Element => {
errors: value.invalid,
success: value.valid,
}));
- setConfigs(configsData);
const archData: ISummaryItem[] = Object.entries(
data.summary.architectures,
@@ -39,7 +45,17 @@ const TreeDetails = (): JSX.Element => {
compilers: value.compilers,
}));
- setArchitectures(archData);
+ const buildSummaryData: Results = {
+ valid: data.summary.builds.valid,
+ invalid: data.summary.builds.invalid,
+ null: data.summary.builds.null,
+ };
+
+ setTreeDetailsData({
+ archs: archData,
+ configs: configsData,
+ builds: buildSummaryData,
+ });
}
}, [data]);
@@ -56,12 +72,41 @@ const TreeDetails = (): JSX.Element => {
,
+ type: 'chart',
+ pieCentralLabel: `${
+ (treeDetailsData?.builds.invalid ?? 0) +
+ (treeDetailsData?.builds.valid ?? 0) +
+ (treeDetailsData?.builds.null ?? 0)
+ }`,
+ pieCentralDescription: (
+
+ ),
+ elements: [
+ {
+ value: treeDetailsData?.builds.valid ?? 0,
+ label: 'Valid',
+ color: Colors.Green,
+ },
+ {
+ value: treeDetailsData?.builds.invalid ?? 0,
+ label: 'Invalid',
+ color: Colors.Red,
+ },
+ {
+ value: treeDetailsData?.builds.null ?? 0,
+ label: 'Null',
+ color: Colors.Gray,
+ },
+ ],
+ },
+ {
+ items: treeDetailsData?.configs ?? [],
title: ,
type: 'listing',
},
{
- summaryBody: archictectures ?? [],
+ summaryBody: treeDetailsData?.archs ?? [],
title: ,
summaryHeaders: [