Skip to content

Commit a1f32ea

Browse files
feat(ref): act-1538 - added response example to ref pages (#1579)
1 parent 787cbb2 commit a1f32ea

File tree

3 files changed

+64
-5
lines changed

3 files changed

+64
-5
lines changed

src/components/ParserOpenRPC/RequestBox/index.tsx

+30-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ interface RequestBoxProps {
1515
openModal: () => void;
1616
submitRequest: () => void;
1717
isMetamaskNetwork?: boolean;
18+
defExampleResponse?: any;
19+
resetResponseHandle: () => void;
1820
}
1921

2022
export default function RequestBox({
@@ -26,6 +28,8 @@ export default function RequestBox({
2628
openModal,
2729
submitRequest,
2830
isMetamaskNetwork = false,
31+
defExampleResponse,
32+
resetResponseHandle,
2933
}: RequestBoxProps) {
3034

3135
const exampleRequest = useMemo(() => {
@@ -40,8 +44,18 @@ export default function RequestBox({
4044
}, [method, paramsData]);
4145

4246
const exampleResponse = useMemo(() => {
43-
return JSON.stringify(response, null, 2);
44-
}, [response]);
47+
if (defExampleResponse && response === undefined) {
48+
return JSON.stringify(
49+
defExampleResponse === "null" ? null : defExampleResponse,
50+
null,
51+
2
52+
);
53+
}
54+
if (response !== undefined) {
55+
return JSON.stringify(response, null, 2);
56+
}
57+
return false
58+
}, [response, defExampleResponse]);
4559

4660
const methodsWithRequiredWalletConnection = ["eth_accounts", "eth_sendTransaction", "personal_sign", "eth_signTypedData_v4"];
4761
const isRunAndCustomizeRequestDisabled = methodsWithRequiredWalletConnection.includes(method) ?
@@ -93,10 +107,22 @@ export default function RequestBox({
93107
}
94108
</div>
95109
</div>
96-
{response !== undefined && (
110+
{exampleResponse && (
97111
<div className={styles.cardWrapper}>
98112
<div className={styles.cardHeader}>
99-
<strong className={styles.cardHeading}>Response</strong>
113+
<strong className={styles.cardHeading}>
114+
{defExampleResponse && response === undefined ? "Example response" : "Response"}
115+
</strong>
116+
{defExampleResponse && response !== undefined && (
117+
<Tooltip message="Reset response">
118+
<button
119+
className={styles.resetResponseBtn}
120+
onClick={resetResponseHandle}
121+
>
122+
<img src="/img/icons/reset-icon.svg" />
123+
</button>
124+
</Tooltip>
125+
)}
100126
</div>
101127
<div>
102128
<CodeBlock language="javascript" className={clsx(styles.responseBlock, "margin-bottom--none")}>

src/components/ParserOpenRPC/RequestBox/styles.module.css

+9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
.cardHeader {
1010
border-bottom: 1px solid #848c96;
1111
padding: 16px;
12+
display: flex;
13+
align-items: center;
14+
justify-content: space-between;
1215
}
1316

1417
.cardHeading {
@@ -31,3 +34,9 @@
3134
max-height: 400px;
3235
overflow-y: auto;
3336
}
37+
38+
.resetResponseBtn {
39+
display: block;
40+
background: none;
41+
border: 0;
42+
}

src/components/ParserOpenRPC/index.tsx

+25-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { createContext, useContext, useMemo, useState } from "react";
1+
import React, { createContext, useContext, useMemo, useState, useEffect } from "react";
22
import { usePluginData } from "@docusaurus/useGlobalData";
33
import { useLocation } from "@docusaurus/router";
44
import { ResponseItem, NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc";
@@ -51,6 +51,7 @@ export default function ParserOpenRPC({
5151
const [isDrawerContentFixed, setIsDrawerContentFixed] = useState(false);
5252
const [drawerLabel, setDrawerLabel] = useState(null);
5353
const [isComplexTypeView, setIsComplexTypeView] = useState(false);
54+
const [defExampleResponse, setDefExampleResponse] = useState(undefined);
5455
const { metaMaskAccount, metaMaskProvider } = useContext(
5556
MetamaskProviderContext
5657
);
@@ -120,6 +121,27 @@ export default function ParserOpenRPC({
120121

121122
const isMetamaskNetwork = network === NETWORK_NAMES.metamask;
122123

124+
useEffect(() => {
125+
const example = currentMethodData?.examples?.[0];
126+
if (example?.result) {
127+
if (example.id && example.jsonrpc) {
128+
setDefExampleResponse({
129+
id: example.id,
130+
jsonrpc: example.jsonrpc,
131+
result: example.result.value,
132+
});
133+
} else {
134+
setDefExampleResponse(example.result.value);
135+
}
136+
} else {
137+
setDefExampleResponse(undefined);
138+
}
139+
}, [currentMethodData]);
140+
141+
const resetResponseHandle = () => {
142+
setReqResult(undefined);
143+
}
144+
123145
const onParamsChangeHandle = (data) => {
124146
trackInputChangeForSegment({
125147
eventName: "Request Configuration Started",
@@ -254,6 +276,8 @@ export default function ParserOpenRPC({
254276
openModal={openModal}
255277
submitRequest={onSubmitRequestHandle}
256278
isMetamaskNetwork={isMetamaskNetwork}
279+
defExampleResponse={defExampleResponse}
280+
resetResponseHandle={resetResponseHandle}
257281
/>
258282
</div>
259283
</div>

0 commit comments

Comments
 (0)