Skip to content

Commit 3507ef2

Browse files
authored
Merge pull request #1989 from kleros/feat/more-descriptive-latest-cases-in-court-and-personalized-link-to-court
feat: more descriptive latest cases in court and personalized link to…
2 parents 3e2bc96 + f2fce81 commit 3507ef2

File tree

6 files changed

+50
-12
lines changed

6 files changed

+50
-12
lines changed

web/src/components/AllCasesButton.tsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,39 @@ import styled from "styled-components";
44

55
import DocIcon from "svgs/icons/doc.svg";
66

7+
import { encodeURIFilter } from "utils/uri";
8+
import { getDescriptiveCourtName } from "utils/getDescriptiveCourtName";
9+
710
import { BlueIconTextButtonContainer } from "./BlueIconTextButtonContainer";
811
import { InternalLink } from "./InternalLink";
912

1013
const StyledDocIcon = styled(DocIcon)`
1114
width: 16px;
1215
height: 16px;
16+
margin-right: 8px;
17+
`;
18+
19+
const IconAndTextContainer = styled.div`
20+
display: inline-block;
1321
`;
1422

15-
const AllCasesButton: React.FC = () => {
23+
interface IAllCasesButton {
24+
courtId?: string;
25+
courtName?: string;
26+
}
27+
28+
const AllCasesButton: React.FC<IAllCasesButton> = ({ courtId, courtName }) => {
29+
const filter = courtId ? { court: courtId } : {};
30+
const link = `/cases/display/1/desc/${encodeURIFilter(filter)}`;
31+
const labelText = courtId ? `All Cases in ${getDescriptiveCourtName(courtName)}` : "All Cases";
32+
1633
return (
17-
<InternalLink to={"/cases/display/1/desc/all"}>
34+
<InternalLink to={link}>
1835
<BlueIconTextButtonContainer>
19-
<StyledDocIcon />
20-
<label>All Cases</label>
36+
<IconAndTextContainer>
37+
<StyledDocIcon />
38+
{labelText}
39+
</IconAndTextContainer>
2140
</BlueIconTextButtonContainer>
2241
</InternalLink>
2342
);

web/src/components/BlueIconTextButtonContainer.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const BlueIconTextButtonContainer = styled.div`
55
${hoverShortTransitionTiming}
66
display: flex;
77
align-items: center;
8+
text-align: center;
89
font-size: 14px;
910
font-weight: 400;
1011
gap: 8px;

web/src/components/LatestCases.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,27 @@ const ButtonContainer = styled.div`
3636
justify-content: center;
3737
`;
3838

39-
const LatestCases: React.FC<{ filters?: Dispute_Filter }> = ({ filters }) => {
39+
interface ILatestCases {
40+
title?: string;
41+
filters?: Dispute_Filter;
42+
courtName?: string;
43+
}
44+
45+
const LatestCases: React.FC<ILatestCases> = ({ title = "Latest Cases", filters, courtName }) => {
4046
const { data } = useCasesQuery(0, 3, filters);
4147
const disputes: DisputeDetailsFragment[] = useMemo(() => data?.disputes as DisputeDetailsFragment[], [data]);
48+
const courtId = typeof filters?.court === "string" ? filters?.court : undefined;
4249

4350
return isUndefined(disputes) || disputes.length > 0 ? (
4451
<Container>
45-
<Title>Latest Cases</Title>
52+
<Title>{title}</Title>
4653
<DisputeContainer>
4754
{isUndefined(disputes)
4855
? Array.from({ length: 3 }).map((_, index) => <SkeletonDisputeCard key={index} />)
4956
: disputes.map((dispute) => <DisputeView key={dispute.id} {...dispute} overrideIsList />)}
5057
</DisputeContainer>
5158
<ButtonContainer>
52-
<AllCasesButton />
59+
<AllCasesButton {...{ courtId, courtName }} />
5360
</ButtonContainer>
5461
</Container>
5562
) : null;

web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import React from "react";
22
import styled from "styled-components";
33

44
import { responsiveSize } from "styles/responsiveSize";
5+
6+
import { getDescriptiveCourtName } from "utils/getDescriptiveCourtName";
7+
58
import Search from "./Search";
69
import DisplayJurors from "./DisplayJurors";
710

@@ -18,10 +21,7 @@ const Title = styled.h1`
1821
const JurorsStakedByCourt: React.FC<{ courtName: string | undefined }> = ({ courtName }) => {
1922
return (
2023
<Container>
21-
<Title>
22-
Jurors Staked in {courtName}
23-
{courtName?.toLowerCase().endsWith("court") || courtName?.toLowerCase().startsWith("corte") ? null : " Court"}
24-
</Title>
24+
<Title>Jurors Staked in {getDescriptiveCourtName(courtName)}</Title>
2525
<Search />
2626
<DisplayJurors />
2727
</Container>

web/src/pages/Courts/CourtDetails/index.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { Card, Breadcrumb } from "@kleros/ui-components-library";
88

99
import { isProductionDeployment } from "consts/index";
1010

11+
import { getDescriptiveCourtName } from "utils/getDescriptiveCourtName";
12+
1113
import { useCourtTree, CourtTreeQuery } from "queries/useCourtTree";
1214

1315
import { landscapeStyle } from "styles/landscapeStyle";
@@ -147,7 +149,11 @@ const CourtDetails: React.FC = () => {
147149
<StyledCard>
148150
<Description />
149151
</StyledCard>
150-
<LatestCases filters={{ court: id }} />
152+
<LatestCases
153+
{...{ courtName }}
154+
title={`Latest Cases in ${getDescriptiveCourtName(courtName)}`}
155+
filters={{ court: id }}
156+
/>
151157
<JurorsStakedByCourt {...{ courtName }} />
152158
<ScrollTop />
153159
</Container>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export const getDescriptiveCourtName = (courtName?: string): string => {
2+
if (!courtName) return "";
3+
const lc = courtName.toLowerCase();
4+
return lc.endsWith("court") || lc.startsWith("corte") ? courtName : `${courtName} Court`;
5+
};

0 commit comments

Comments
 (0)