Skip to content

Commit 4066228

Browse files
authored
Merge pull request #1666 from kleros/feat/hash-path-to-all-miniguides
Links to specific mini-guides
2 parents db762de + 50883f1 commit 4066228

File tree

2 files changed

+67
-13
lines changed

2 files changed

+67
-13
lines changed

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

+19-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import styled, { css } from "styled-components";
33

44
import { useLocation, useNavigate } from "react-router-dom";
55
import { useClickAway } from "react-use";
6-
import BookOpenIcon from "svgs/icons/book-open.svg";
76

87
import { CompactPagination } from "@kleros/ui-components-library";
98

9+
import BookOpenIcon from "svgs/icons/book-open.svg";
10+
1011
import { landscapeStyle } from "styles/landscapeStyle";
1112
import { responsiveSize } from "styles/responsiveSize";
1213

@@ -129,6 +130,17 @@ interface ITemplate {
129130
isVisible: boolean;
130131
}
131132

133+
export const miniGuideHashes = [
134+
"#jurorlevels-miniguide",
135+
"#appeal-miniguide",
136+
"#binaryvoting-miniguide",
137+
"#disputeresolver-miniguide",
138+
"#rankedvoting-miniguide",
139+
"#staking-miniguide",
140+
"#onboarding-miniguide",
141+
] as const;
142+
export type MiniguideHashesType = (typeof miniGuideHashes)[number];
143+
132144
const Template: React.FC<ITemplate> = ({
133145
onClose,
134146
LeftContent,
@@ -143,13 +155,15 @@ const Template: React.FC<ITemplate> = ({
143155
const containerRef = useRef(null);
144156
const location = useLocation();
145157
const navigate = useNavigate();
146-
const removeOnboardingHashPath = useCallback(() => {
147-
if (isOnboarding && location.hash.includes("#onboarding")) navigate("#", { replace: true });
148-
}, [location.hash, navigate, isOnboarding]);
158+
const removeMiniGuideHashPath = useCallback(() => {
159+
if (miniGuideHashes.some((hash) => location.hash.includes(hash))) {
160+
navigate("#", { replace: true });
161+
}
162+
}, [location.hash, navigate]);
149163

150164
const onCloseAndRemoveOnboardingHashPath = () => {
151165
onClose();
152-
removeOnboardingHashPath();
166+
removeMiniGuideHashPath();
153167
};
154168

155169
useClickAway(containerRef, () => {

web/src/layout/Header/DesktopHeader.tsx

+48-8
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,22 @@ import { useAccount } from "wagmi";
77

88
import KlerosSolutionsIcon from "svgs/menu-icons/kleros-solutions.svg";
99

10-
import { useLockOverlayScroll } from "hooks/useLockOverlayScroll";
11-
1210
import { DEFAULT_CHAIN } from "consts/chains";
11+
import { useLockOverlayScroll } from "hooks/useLockOverlayScroll";
1312

1413
import { landscapeStyle } from "styles/landscapeStyle";
1514
import { responsiveSize } from "styles/responsiveSize";
1615

1716
import ConnectWallet from "components/ConnectWallet";
1817
import LightButton from "components/LightButton";
18+
import JurorLevels from "components/Popup/MiniGuides/JurorLevels";
19+
import Appeal from "components/Popup/MiniGuides/Appeal";
20+
import BinaryVoting from "components/Popup/MiniGuides/BinaryVoting";
21+
import DisputeResolver from "components/Popup/MiniGuides/DisputeResolver";
22+
import { MiniguideHashesType } from "components/Popup/MiniGuides/MainStructureTemplate";
1923
import Onboarding from "components/Popup/MiniGuides/Onboarding";
24+
import RankedVoting from "components/Popup/MiniGuides/RankedVoting";
25+
import Staking from "components/Popup/MiniGuides/Staking";
2026

2127
import Logo from "./Logo";
2228
import DappList from "./navbar/DappList";
@@ -105,20 +111,48 @@ const DesktopHeader: React.FC = () => {
105111
const [isDappListOpen, toggleIsDappListOpen] = useToggle(false);
106112
const [isHelpOpen, toggleIsHelpOpen] = useToggle(false);
107113
const [isSettingsOpen, toggleIsSettingsOpen] = useToggle(false);
114+
const [isJurorLevelsMiniGuideOpen, toggleIsJurorLevelsMiniGuideOpen] = useToggle(false);
115+
const [isAppealMiniGuideOpen, toggleIsAppealMiniGuideOpen] = useToggle(false);
116+
const [isBinaryVotingMiniGuideOpen, toggleIsBinaryVotingMiniGuideOpen] = useToggle(false);
117+
const [isDisputeResolverMiniGuideOpen, toggleIsDisputeResolverMiniGuideOpen] = useToggle(false);
118+
const [isRankedVotingMiniGuideOpen, toggleIsRankedVotingMiniGuideOpen] = useToggle(false);
119+
const [isStakingMiniGuideOpen, toggleIsStakingMiniGuideOpen] = useToggle(false);
108120
const [isOnboardingMiniGuidesOpen, toggleIsOnboardingMiniGuidesOpen] = useToggle(false);
109121
const [initialTab, setInitialTab] = useState<number>(0);
110122
const location = useLocation();
111123
const { isConnected, chainId } = useAccount();
112124
const isDefaultChain = chainId === DEFAULT_CHAIN;
113-
114125
const initializeFragmentURL = useCallback(() => {
115-
const hash = location.hash;
116-
const hasOnboardingPath = hash.includes("#onboarding");
117-
const hasNotificationsPath = hash.includes("#notifications");
118-
toggleIsOnboardingMiniGuidesOpen(hasOnboardingPath);
126+
const hashIncludes = (hash: MiniguideHashesType | "#notifications") => location.hash.includes(hash);
127+
const hasJurorLevelsMiniGuidePath = hashIncludes("#jurorlevels-miniguide");
128+
const hasAppealMiniGuidePath = hashIncludes("#appeal-miniguide");
129+
const hasBinaryVotingMiniGuidePath = hashIncludes("#binaryvoting-miniguide");
130+
const hasDisputeResolverMiniGuidePath = hashIncludes("#disputeresolver-miniguide");
131+
const hasRankedVotingMiniGuidePath = hashIncludes("#rankedvoting-miniguide");
132+
const hasStakingMiniGuidePath = hashIncludes("#staking-miniguide");
133+
const hasOnboardingMiniGuidePath = hashIncludes("#onboarding-miniguide");
134+
const hasNotificationsPath = hashIncludes("#notifications");
135+
toggleIsJurorLevelsMiniGuideOpen(hasJurorLevelsMiniGuidePath);
136+
toggleIsAppealMiniGuideOpen(hasAppealMiniGuidePath);
137+
toggleIsBinaryVotingMiniGuideOpen(hasBinaryVotingMiniGuidePath);
138+
toggleIsDisputeResolverMiniGuideOpen(hasDisputeResolverMiniGuidePath);
139+
toggleIsRankedVotingMiniGuideOpen(hasRankedVotingMiniGuidePath);
140+
toggleIsStakingMiniGuideOpen(hasStakingMiniGuidePath);
141+
toggleIsOnboardingMiniGuidesOpen(hasOnboardingMiniGuidePath);
142+
toggleIsAppealMiniGuideOpen(hasAppealMiniGuidePath);
119143
toggleIsSettingsOpen(hasNotificationsPath);
120144
setInitialTab(hasNotificationsPath ? 1 : 0);
121-
}, [location.hash, toggleIsSettingsOpen, toggleIsOnboardingMiniGuidesOpen]);
145+
}, [
146+
toggleIsJurorLevelsMiniGuideOpen,
147+
toggleIsAppealMiniGuideOpen,
148+
toggleIsBinaryVotingMiniGuideOpen,
149+
toggleIsDisputeResolverMiniGuideOpen,
150+
toggleIsRankedVotingMiniGuideOpen,
151+
toggleIsStakingMiniGuideOpen,
152+
toggleIsOnboardingMiniGuidesOpen,
153+
toggleIsSettingsOpen,
154+
location.hash,
155+
]);
122156

123157
useEffect(initializeFragmentURL, [initializeFragmentURL]);
124158

@@ -161,6 +195,12 @@ const DesktopHeader: React.FC = () => {
161195
{isSettingsOpen && <Settings {...{ toggleIsSettingsOpen, isSettingsOpen, initialTab }} />}
162196
</PopupContainer>
163197
)}
198+
{isJurorLevelsMiniGuideOpen && <JurorLevels toggleMiniGuide={toggleIsJurorLevelsMiniGuideOpen} />}
199+
{isAppealMiniGuideOpen && <Appeal toggleMiniGuide={toggleIsAppealMiniGuideOpen} />}
200+
{isBinaryVotingMiniGuideOpen && <BinaryVoting toggleMiniGuide={toggleIsBinaryVotingMiniGuideOpen} />}
201+
{isDisputeResolverMiniGuideOpen && <DisputeResolver toggleMiniGuide={toggleIsDisputeResolverMiniGuideOpen} />}
202+
{isRankedVotingMiniGuideOpen && <RankedVoting toggleMiniGuide={toggleIsRankedVotingMiniGuideOpen} />}
203+
{isStakingMiniGuideOpen && <Staking toggleMiniGuide={toggleIsStakingMiniGuideOpen} />}
164204
{isOnboardingMiniGuidesOpen && <Onboarding toggleMiniGuide={toggleIsOnboardingMiniGuidesOpen} />}
165205
</>
166206
);

0 commit comments

Comments
 (0)