Skip to content

Commit 194df33

Browse files
authored
Merge pull request #3423 from IntersectMBO/feat/3341-make-username-visible
feat(#3341): add Proposal Discussion context
2 parents d20a986 + 8ebf29c commit 194df33

File tree

6 files changed

+81
-12
lines changed

6 files changed

+81
-12
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ changes.
1212

1313
### Added
1414

15+
- Add Proposal discussion context that manages username [Issue 3341](https://github.com/IntersectMBO/govtool/issues/3341)
16+
1517
### Fixed
1618

1719
- Fix scroll on a drawer on smaller resolution

govtool/frontend/src/context/contextProviders.tsx

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DataActionsBarProvider } from "./dataActionsBar";
66
import { FeatureFlagProvider } from "./featureFlag";
77
import { GovernanceActionProvider } from "./governanceAction";
88
import { AdaHandleProvider } from "./adaHandle";
9+
import { ProposalDiscussionProvider } from "./proposalDiscussion";
910

1011
interface Props {
1112
children: React.ReactNode;
@@ -14,17 +15,19 @@ interface Props {
1415
const ContextProviders = ({ children }: Props) => (
1516
<AppContextProvider>
1617
<GovernanceActionProvider>
17-
<FeatureFlagProvider>
18-
<AdaHandleProvider>
19-
<ModalProvider>
20-
<SnackbarProvider>
21-
<DataActionsBarProvider>
22-
<CardanoProvider>{children}</CardanoProvider>
23-
</DataActionsBarProvider>
24-
</SnackbarProvider>
25-
</ModalProvider>
26-
</AdaHandleProvider>
27-
</FeatureFlagProvider>
18+
<ProposalDiscussionProvider>
19+
<FeatureFlagProvider>
20+
<AdaHandleProvider>
21+
<ModalProvider>
22+
<SnackbarProvider>
23+
<DataActionsBarProvider>
24+
<CardanoProvider>{children}</CardanoProvider>
25+
</DataActionsBarProvider>
26+
</SnackbarProvider>
27+
</ModalProvider>
28+
</AdaHandleProvider>
29+
</FeatureFlagProvider>
30+
</ProposalDiscussionProvider>
2831
</GovernanceActionProvider>
2932
</AppContextProvider>
3033
);

govtool/frontend/src/context/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export * from "./usersnapContext";
88
export * from "./wallet";
99
export * from "./featureFlag";
1010
export * from "./governanceAction";
11+
export * from "./proposalDiscussion";
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import {
2+
PropsWithChildren,
3+
useMemo,
4+
createContext,
5+
useContext,
6+
useState,
7+
} from "react";
8+
9+
type ProposalDiscussionContextType = {
10+
username: string;
11+
setUsername: (username: string) => void;
12+
} | null;
13+
14+
const ProposalDiscussionContext =
15+
createContext<ProposalDiscussionContextType>(null);
16+
17+
/**
18+
* Provides proposal discussion context to its children components.
19+
*
20+
* @param children - The child components to render.
21+
*/
22+
const ProposalDiscussionProvider = ({ children }: PropsWithChildren) => {
23+
const [username, setUsername] = useState<string>("");
24+
25+
const value = useMemo(
26+
() => ({
27+
username,
28+
setUsername,
29+
}),
30+
[username],
31+
);
32+
33+
return (
34+
<ProposalDiscussionContext.Provider value={value}>
35+
{children}
36+
</ProposalDiscussionContext.Provider>
37+
);
38+
};
39+
40+
/**
41+
* Custom hook to use the ProposalDiscussionContext.
42+
* @returns The context value.
43+
*/
44+
const useProposalDiscussion = () => {
45+
const context = useContext(ProposalDiscussionContext);
46+
if (!context) {
47+
throw new Error(
48+
"useProposalDiscussion must be used within a ProposalDiscussionProvider",
49+
);
50+
}
51+
return context;
52+
};
53+
54+
export { ProposalDiscussionProvider, useProposalDiscussion };

govtool/frontend/src/pages/ProposalDiscussion.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import React, { ComponentProps, Suspense } from "react";
22
import { Box, CircularProgress } from "@mui/material";
33
import "@intersect.mbo/pdf-ui/style";
4-
import { useCardano, useGovernanceActions } from "@/context";
4+
import {
5+
useCardano,
6+
useGovernanceActions,
7+
useProposalDiscussion,
8+
} from "@/context";
59
import { useValidateMutation } from "@/hooks/mutations";
610
import { useScreenDimension } from "@/hooks/useScreenDimension";
711
import { Footer, TopNav } from "@/components/organisms";
@@ -18,6 +22,7 @@ export const ProposalDiscussionPillar = () => {
1822
const { voter } = useGetVoterInfo();
1923
const { createGovernanceActionJsonLD, createHash } = useGovernanceActions();
2024
const { fetchDRepVotingPowerList } = useGetDRepVotingPowerList();
25+
const { username, setUsername } = useProposalDiscussion();
2126

2227
return (
2328
<Box
@@ -67,6 +72,8 @@ export const ProposalDiscussionPillar = () => {
6772
>["validateMetadata"]
6873
}
6974
fetchDRepVotingPowerList={fetchDRepVotingPowerList}
75+
username={username}
76+
setUsername={setUsername}
7077
/>
7178
</Suspense>
7279
</Box>

govtool/frontend/src/types/@intersect.mbo.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ type ProposalDiscussionProps = {
2727
fetchDRepVotingPowerList: (
2828
identifiers: string[],
2929
) => Promise<DRepVotingPowerListResponse>;
30+
username: string;
31+
setUsername: (username: string) => void;
3032
};
3133

3234
type GovernanceActionsOutcomesProps = {

0 commit comments

Comments
 (0)