Skip to content

Commit

Permalink
feat(#65): add a status chart to tree deatils page
Browse files Browse the repository at this point in the history
  • Loading branch information
mari1912 committed Jul 17, 2024
1 parent 45aef89 commit 28d9fe9
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 15 deletions.
2 changes: 1 addition & 1 deletion dashboard/src/components/Cards/BaseCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down
9 changes: 6 additions & 3 deletions dashboard/src/components/CardsGroup/CardsGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 => {
Expand All @@ -24,7 +25,7 @@ const CardsGroup = ({ cards }: ICardsGroup): JSX.Element => {
/>
));
}, [cards]);
return <div className="grid grid-cols-2 gap-8">{cardsList}</div>;
return <div className="columns-2">{cardsList}</div>;
};

const CardContent = ({ card }: ICardContent): JSX.Element => {
Expand All @@ -38,6 +39,8 @@ const CardContent = ({ card }: ICardContent): JSX.Element => {
summaryBody={card?.summaryBody}
/>
);
} else if (card.type === 'chart') {
return <StatusChartMemoized {...card} />;
} else {
return <></>;
}
Expand Down
2 changes: 2 additions & 0 deletions dashboard/src/locales/messages/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
},
Expand Down
57 changes: 51 additions & 6 deletions dashboard/src/routes/TreeDetails/TreeDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<IListingItem[]>();
const [archictectures, setArchitectures] = useState<ISummaryItem[]>();
const [treeDetailsData, setTreeDetailsData] = useState<ITreeDetails>();

useEffect(() => {
if (data) {
Expand All @@ -30,7 +37,6 @@ const TreeDetails = (): JSX.Element => {
errors: value.invalid,
success: value.valid,
}));
setConfigs(configsData);

const archData: ISummaryItem[] = Object.entries(
data.summary.architectures,
Expand All @@ -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]);

Expand All @@ -56,12 +72,41 @@ const TreeDetails = (): JSX.Element => {
<CardsGroup
cards={[
{
items: configs ?? [],
title: <FormattedMessage id="treeDetails.buildStatus" />,
type: 'chart',
pieCentralLabel: `${
(treeDetailsData?.builds.invalid ?? 0) +
(treeDetailsData?.builds.valid ?? 0) +
(treeDetailsData?.builds.null ?? 0)
}`,
pieCentralDescription: (
<FormattedMessage id="treeDetails.executed" />
),
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: <FormattedMessage id="treeDetails.configs" />,
type: 'listing',
},
{
summaryBody: archictectures ?? [],
summaryBody: treeDetailsData?.archs ?? [],
title: <FormattedMessage id="treeDetails.summary" />,
summaryHeaders: [
<FormattedMessage
Expand Down
12 changes: 7 additions & 5 deletions dashboard/src/types/tree/TreeDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@ type TreeDetailsBuild = {
export type TreeDetails = {
builds: TreeDetailsBuild[];
summary: {
builds: {
valid: number;
invalid: number;
null: number;
};
builds: Results;
configs: object;
architectures: object;
};
};

export type Results = {
valid: number;
invalid: number;
null: number;
};

0 comments on commit 28d9fe9

Please sign in to comment.