Skip to content

Commit ef4c551

Browse files
committed
Merge branch 'dev' into feat/evidence-attachment-display
2 parents 8010fc1 + 3da67bd commit ef4c551

File tree

10 files changed

+75
-13
lines changed

10 files changed

+75
-13
lines changed

subgraph/core/schema.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ interface Evidence {
5353
evidence: String!
5454
evidenceGroup: EvidenceGroup!
5555
sender: User!
56+
timestamp: BigInt!
5657
}
5758

5859
############
@@ -296,6 +297,7 @@ type ClassicEvidence implements Evidence @entity {
296297
evidence: String!
297298
evidenceGroup: EvidenceGroup!
298299
sender: User!
300+
timestamp: BigInt!
299301
}
300302

301303
type ClassicContribution implements Contribution @entity {

subgraph/core/src/EvidenceModule.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export function handleEvidenceEvent(event: EvidenceEvent): void {
1212
evidenceGroup.save();
1313
const evidence = new ClassicEvidence(`${evidenceGroupID}-${evidenceIndex.toString()}`);
1414
const userId = event.params._party.toHexString();
15+
evidence.timestamp = event.block.timestamp;
1516
evidence.evidence = event.params._evidence;
1617
evidence.evidenceGroup = evidenceGroupID.toString();
1718
evidence.sender = userId;

subgraph/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@kleros/kleros-v2-subgraph",
3-
"version": "0.5.0",
3+
"version": "0.5.1",
44
"license": "MIT",
55
"scripts": {
66
"update:core:arbitrum-sepolia-devnet": "./scripts/update.sh arbitrumSepoliaDevnet arbitrum-sepolia core/subgraph.yaml",

web/src/components/EvidenceCard.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import React from "react";
22
import styled, { css } from "styled-components";
33

44
import Identicon from "react-identicons";
5+
import ReactMarkdown from "react-markdown";
56
import { Link } from "react-router-dom";
67

78
import { Card } from "@kleros/ui-components-library";
89

910
import AttachmentIcon from "svgs/icons/attachment.svg";
1011

1112
import { useIPFSQuery } from "hooks/useIPFSQuery";
13+
import { formatDate } from "utils/date";
1214
import { getIpfsUrl } from "utils/getIpfsUrl";
1315
import { shortenAddress } from "utils/shortenAddress";
1416

@@ -36,9 +38,19 @@ const Index = styled.p`
3638
display: inline-block;
3739
`;
3840

41+
const StyledReactMarkdown = styled(ReactMarkdown)`
42+
a {
43+
font-size: 16px;
44+
}
45+
code {
46+
color: ${({ theme }) => theme.secondaryText};
47+
}
48+
`;
49+
3950
const BottomShade = styled.div`
4051
background-color: ${({ theme }) => theme.lightBlue};
4152
display: flex;
53+
flex-wrap: wrap;
4254
align-items: center;
4355
gap: 16px;
4456
padding: 12px ${responsiveSize(8, 24)};
@@ -90,6 +102,10 @@ const DesktopText = styled.span`
90102
)}
91103
`;
92104

105+
const Timestamp = styled.p`
106+
color: ${({ theme }) => theme.secondaryText};
107+
`;
108+
93109
const MobileText = styled.span`
94110
${landscapeStyle(
95111
() => css`
@@ -124,9 +140,10 @@ interface IEvidenceCard {
124140
evidence: string;
125141
sender: string;
126142
index: number;
143+
timestamp: string;
127144
}
128145

129-
const EvidenceCard: React.FC<IEvidenceCard> = ({ evidence, sender, index }) => {
146+
const EvidenceCard: React.FC<IEvidenceCard> = ({ evidence, sender, index, timestamp }) => {
130147
const { data } = useIPFSQuery(evidence);
131148

132149
return (
@@ -136,7 +153,7 @@ const EvidenceCard: React.FC<IEvidenceCard> = ({ evidence, sender, index }) => {
136153
{data ? (
137154
<>
138155
<h3>{data.name}</h3>
139-
<p>{data.description}</p>
156+
<StyledReactMarkdown>{data.description}</StyledReactMarkdown>
140157
</>
141158
) : (
142159
<p>{evidence}</p>
@@ -147,6 +164,7 @@ const EvidenceCard: React.FC<IEvidenceCard> = ({ evidence, sender, index }) => {
147164
<Identicon size="24" string={sender} />
148165
<p>{shortenAddress(sender)}</p>
149166
</AccountContainer>
167+
<Timestamp>{formatDate(Number(timestamp))}</Timestamp>
150168
{data && typeof data.fileURI !== "undefined" && (
151169
<StyledLink to={`attachment/?url=${getIpfsUrl(data.fileURI)}`}>
152170
<AttachmentIcon />

web/src/components/Popup/MiniGuides/MainStructureTemplate.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import React, { Dispatch, SetStateAction, useRef } from "react";
1+
import React, { Dispatch, SetStateAction, useCallback, useRef } from "react";
22
import styled, { css } from "styled-components";
33

4+
import { useLocation, useNavigate } from "react-router-dom";
45
import { useClickAway } from "react-use";
56
import BookOpenIcon from "svgs/icons/book-open.svg";
67

@@ -164,9 +165,16 @@ const Template: React.FC<ITemplate> = ({
164165
isVisible,
165166
}) => {
166167
const containerRef = useRef(null);
168+
const location = useLocation();
169+
const navigate = useNavigate();
170+
const removeOnboardingHashPath = useCallback(() => {
171+
if (isOnboarding && location.hash.includes("#onboarding")) navigate("#", { replace: true });
172+
}, [location.hash, navigate, isOnboarding]);
173+
167174
useClickAway(containerRef, () => {
168175
if (canClose) {
169176
onClose();
177+
removeOnboardingHashPath();
170178
}
171179
});
172180

@@ -196,7 +204,14 @@ const Template: React.FC<ITemplate> = ({
196204
/>
197205
</LeftContainer>
198206
<RightContainer>
199-
<Close onClick={onClose}>Close</Close>
207+
<Close
208+
onClick={() => {
209+
onClose();
210+
removeOnboardingHashPath();
211+
}}
212+
>
213+
Close
214+
</Close>
200215
{RightContent}
201216
</RightContainer>
202217
</Container>

web/src/hooks/queries/useEvidences.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const evidencesQuery = graphql(`
1414
sender {
1515
id
1616
}
17+
timestamp
1718
}
1819
}
1920
`);

web/src/layout/Header/DesktopHeader.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import React from "react";
1+
import React, { useCallback, useEffect, useState } from "react";
22
import styled, { css } from "styled-components";
33

4+
import { useLocation } from "react-router-dom";
45
import { useToggle } from "react-use";
56

67
import KlerosSolutionsIcon from "svgs/menu-icons/kleros-solutions.svg";
@@ -13,6 +14,7 @@ import { responsiveSize } from "styles/responsiveSize";
1314
import ConnectWallet from "components/ConnectWallet";
1415
import LightButton from "components/LightButton";
1516
import { Overlay } from "components/Overlay";
17+
import Onboarding from "components/Popup/MiniGuides/Onboarding";
1618

1719
import Logo from "./Logo";
1820
import DappList from "./navbar/DappList";
@@ -86,10 +88,25 @@ const PopupContainer = styled.div`
8688
z-index: 30;
8789
`;
8890

89-
const DesktopHeader = () => {
91+
const DesktopHeader: React.FC = () => {
9092
const [isDappListOpen, toggleIsDappListOpen] = useToggle(false);
9193
const [isHelpOpen, toggleIsHelpOpen] = useToggle(false);
9294
const [isSettingsOpen, toggleIsSettingsOpen] = useToggle(false);
95+
const [isOnboardingMiniGuidesOpen, toggleIsOnboardingMiniGuidesOpen] = useToggle(false);
96+
const [initialTab, setInitialTab] = useState<number>(0);
97+
const location = useLocation();
98+
99+
const initializeFragmentURL = useCallback(() => {
100+
const hash = location.hash;
101+
const hasOnboardingPath = hash.includes("#onboarding");
102+
const hasNotificationsPath = hash.includes("#notifications");
103+
toggleIsOnboardingMiniGuidesOpen(hasOnboardingPath);
104+
toggleIsSettingsOpen(hasNotificationsPath);
105+
setInitialTab(hasNotificationsPath ? 1 : 0);
106+
}, [location.hash, toggleIsSettingsOpen, toggleIsOnboardingMiniGuidesOpen]);
107+
108+
useEffect(initializeFragmentURL, [initializeFragmentURL]);
109+
93110
useLockOverlayScroll(isDappListOpen || isHelpOpen || isSettingsOpen);
94111

95112
return (
@@ -124,9 +141,10 @@ const DesktopHeader = () => {
124141
<Overlay />
125142
{isDappListOpen && <DappList {...{ toggleIsDappListOpen, isDappListOpen }} />}
126143
{isHelpOpen && <Help {...{ toggleIsHelpOpen, isHelpOpen }} />}
127-
{isSettingsOpen && <Settings {...{ toggleIsSettingsOpen, isSettingsOpen }} />}
144+
{isSettingsOpen && <Settings {...{ toggleIsSettingsOpen, isSettingsOpen, initialTab }} />}
128145
</PopupContainer>
129146
)}
147+
{isOnboardingMiniGuidesOpen && <Onboarding toggleMiniGuide={toggleIsOnboardingMiniGuidesOpen} />}
130148
</>
131149
);
132150
};

web/src/layout/Header/navbar/Menu/Settings/index.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useRef, useState } from "react";
22
import styled, { css } from "styled-components";
33

4+
import { useLocation, useNavigate } from "react-router-dom";
45
import { useClickAway } from "react-use";
56

67
import { Tabs } from "@kleros/ui-components-library";
@@ -73,10 +74,15 @@ const TABS = [
7374
},
7475
];
7576

76-
const Settings: React.FC<ISettings> = ({ toggleIsSettingsOpen }) => {
77-
const [currentTab, setCurrentTab] = useState<number>(0);
77+
const Settings: React.FC<ISettings> = ({ toggleIsSettingsOpen, initialTab }) => {
78+
const [currentTab, setCurrentTab] = useState<number>(initialTab || 0);
7879
const containerRef = useRef(null);
79-
useClickAway(containerRef, () => toggleIsSettingsOpen());
80+
const location = useLocation();
81+
const navigate = useNavigate();
82+
useClickAway(containerRef, () => {
83+
toggleIsSettingsOpen();
84+
if (location.hash.includes("#notifications")) navigate("#", { replace: true });
85+
});
8086

8187
return (
8288
<>

web/src/layout/Header/navbar/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ const PopupContainer = styled.div`
8282

8383
export interface ISettings {
8484
toggleIsSettingsOpen: () => void;
85+
initialTab?: number;
8586
}
8687

8788
export interface IHelp {

web/src/pages/Cases/CaseDetails/Evidence/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ const Evidence: React.FC<{ arbitrable?: `0x${string}` }> = ({ arbitrable }) => {
6262
/>
6363
</EnsureChain>
6464
{data ? (
65-
data.evidences.map(({ key, evidence, sender }, i) => (
66-
<EvidenceCard key={key} index={i + 1} sender={sender?.id} {...{ evidence }} />
65+
data.evidences.map(({ key, evidence, sender, timestamp }, i) => (
66+
<EvidenceCard key={key} index={i + 1} sender={sender?.id} {...{ evidence, timestamp }} />
6767
))
6868
) : (
6969
<SkeletonEvidenceCard />

0 commit comments

Comments
 (0)