From 165481f0e2d73aadecd9f7f8d97e308ffb261f2b Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Tue, 9 Apr 2024 20:48:26 +0700 Subject: [PATCH 01/13] feat: update UI PackageExplorer --- media/logo.svg | 3 + media/tools.svg | 1 - package.json | 4 +- webview-ui/src/components/PackageExplorer.tsx | 108 +++++++++ .../src/features/moveCall/v2/MoveCall.tsx | 226 +++++++++++++----- 5 files changed, 278 insertions(+), 64 deletions(-) create mode 100644 media/logo.svg delete mode 100644 media/tools.svg create mode 100644 webview-ui/src/components/PackageExplorer.tsx diff --git a/media/logo.svg b/media/logo.svg new file mode 100644 index 0000000..1264ad2 --- /dev/null +++ b/media/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/media/tools.svg b/media/tools.svg deleted file mode 100644 index f1cd568..0000000 --- a/media/tools.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/package.json b/package.json index 34b6376..79adfe7 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ { "id": "sui-simulator-sidebar-view", "title": "Sui Simulator", - "icon": "media/tools.svg" + "icon": "media/logo.svg" } ] }, @@ -28,7 +28,7 @@ "type": "webview", "id": "sui-simulator-sidebar", "name": "Sui Simulator", - "icon": "media/tools.svg", + "icon": "media/logo.svg", "contextualTitle": "Sui Simulator" } ] diff --git a/webview-ui/src/components/PackageExplorer.tsx b/webview-ui/src/components/PackageExplorer.tsx new file mode 100644 index 0000000..770cdc6 --- /dev/null +++ b/webview-ui/src/components/PackageExplorer.tsx @@ -0,0 +1,108 @@ +import React from 'react' +import { ArrowLeft } from '../icons/ArrowLeft' +import { Label } from './Label' +import { ArrowDown } from '../icons/ArrowDown' + +export const PackageExplorer = () => { + return ( +
+
+
+
+
+ +
+ Package Explorer +
+
+
+
+
+
+ Input Package +
+
+
+
+ input your package here +
+
+
+
+
+
+ {/*
+
+
+

+ Error: Couldn’t Find Package Id +

+ +
+
+
*/} +
+
+
+

+ Package ID: + 0ghhffghhghf2330056666 +

+
+
+
+ Module +
+ +
+
+
+ Function +
+ +
+
+
+ Args +
+
+
+ U64 +
+
+
+
+ String +
+
+
+
+ Hero +
+
+
+
+
+ Call +
+
+
+
+
+
+
+
+ ) +} diff --git a/webview-ui/src/features/moveCall/v2/MoveCall.tsx b/webview-ui/src/features/moveCall/v2/MoveCall.tsx index 2a7de02..f4bdaf9 100644 --- a/webview-ui/src/features/moveCall/v2/MoveCall.tsx +++ b/webview-ui/src/features/moveCall/v2/MoveCall.tsx @@ -7,6 +7,10 @@ import { Button } from "../../../components/Button"; import { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519"; import { TransactionBlock } from "@mysten/sui.js/transactions"; import { useNavigate } from "react-router-dom"; +import { ArrowDown } from "../../../icons/ArrowDown"; +import { Label } from "../../../components/Label"; +import { ArrowLeft } from "../../../icons/ArrowLeft"; +import { shortenAddress } from "../../../utils/address_shortener"; export interface IMoveCallProps { state: MoveCallState; @@ -181,70 +185,170 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { navigate("/"); }; + // {/*

Still Developing

+ //

Back

+ //

Call

+ //
+ // Mnemonics: + // + //
+ //
+ // Package: + // + //
+ //
+ // {modulesName.length > 0 && ( + // <> + // Module: + // + // + // )} + //
+ //
+ // {currentModule.length > 0 && ( + // <> + // Function: + // + // + // )} + //
+ // {currentFunction.length > 0 && ( + // <> + //

Args

+ // {args.map((arg, index) => { + // return ( + //
+ // handleSetValueToArg(index, e.target.value)} + // /> + // {/* value need to set like above if not will have bug when choose between functions */} + //
+ // ); + // })} + // + // )} + + // + // {status === MoveCallStatus.FINISH &&

Result: ${response}

} + // {status === MoveCallStatus.ERROR &&

Error: ${error}

} */} + return ( <> -

Still Developing

-

Back

-

Call

-
- Mnemonics: - -
-
- Package: - -
-
- {modulesName.length > 0 && ( - <> - Module: - - - )} -
-
- {currentModule.length > 0 && ( - <> - Function: - - - )} -
- {currentFunction.length > 0 && ( - <> -

Args

- {args.map((arg, index) => { - return ( -
- handleSetValueToArg(index, e.target.value)} - /> - {/* value need to set like above if not will have bug when choose between functions */} +
+
+
+
+
+ +
+ Package Explorer +
+
+
+
+
+
+ Input Package +
+
+
+
+ input your package here +
+
+
- ); - })} - - )} - - - {status === MoveCallStatus.FINISH &&

Result: ${response}

} - {status === MoveCallStatus.ERROR &&

Error: ${error}

} +
+
+ {/*
+
+
+

+ Error: Couldn’t Find Package Id +

+ +
+
+
*/} +
+
+
+

+ Package ID: + {shortenAddress("0x02a212de6a9dfa3a69e22387acfbafbb1a9e591bd9d636e7895dcfc8de05f331", 5)} +

+
+
+
+ Module +
+ +
+
+
+ Function +
+ +
+
+
+ Args +
+
+
+ U64 +
+
+
+
+ String +
+
+
+
+ Hero +
+
+
+
+
+ Call +
+
+
+
+
+
+
+
); }; From a1f9e4a3d74c1379dc73c9d629d7add867658ffe Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Tue, 9 Apr 2024 21:58:20 +0700 Subject: [PATCH 02/13] feat: update UI PackageExplorer --- .../src/features/moveCall/v2/MoveCall.tsx | 240 ++++++++---------- webview-ui/src/features/moveCall/v2/index.tsx | 6 - webview-ui/src/types/index.ts | 1 - 3 files changed, 106 insertions(+), 141 deletions(-) diff --git a/webview-ui/src/features/moveCall/v2/MoveCall.tsx b/webview-ui/src/features/moveCall/v2/MoveCall.tsx index f4bdaf9..5a9c0e0 100644 --- a/webview-ui/src/features/moveCall/v2/MoveCall.tsx +++ b/webview-ui/src/features/moveCall/v2/MoveCall.tsx @@ -2,7 +2,7 @@ import React, { useEffect } from "react"; import { ActionType, MoveCallState } from "../../../types"; import { Input } from "../../../components/Input"; import { MoveCallActionType, MoveCallStatus } from "../../../../../src/enums"; -import { useSuiClient } from "@mysten/dapp-kit"; +import { useSuiClient, useSuiClientContext } from "@mysten/dapp-kit"; import { Button } from "../../../components/Button"; import { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519"; import { TransactionBlock } from "@mysten/sui.js/transactions"; @@ -10,7 +10,7 @@ import { useNavigate } from "react-router-dom"; import { ArrowDown } from "../../../icons/ArrowDown"; import { Label } from "../../../components/Label"; import { ArrowLeft } from "../../../icons/ArrowLeft"; -import { shortenAddress } from "../../../utils/address_shortener"; +import { shortenAddress, shortenObjectType } from "../../../utils/address_shortener"; export interface IMoveCallProps { state: MoveCallState; @@ -19,9 +19,9 @@ export interface IMoveCallProps { export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { const suiClient = useSuiClient(); + const { network, selectNetwork } = useSuiClientContext(); const { - mnemonics, packageId, args, argsUserInput, @@ -34,10 +34,6 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { status, } = state; - const handleMnemonicsChange = (e: React.ChangeEvent) => { - dispatch({ type: MoveCallActionType.SET_MNEMONICS, payload: e.target.value }); - }; - const handlePackageIdChange = (e: React.ChangeEvent) => { dispatch({ type: MoveCallActionType.SET_PACKAGE_ID, payload: e.target.value }); }; @@ -121,63 +117,63 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { let keypair: Ed25519Keypair | null = null; - const handleCall = async () => { - try { - keypair = Ed25519Keypair.deriveKeypair(mnemonics, DEFAULT_ED25519_DERIVATION_PATH); - const privateKey = keypair.getSecretKey(); - const publicKey = keypair.getPublicKey(); - const address = publicKey.toSuiAddress(); + // const handleCall = async () => { + // try { + // keypair = Ed25519Keypair.deriveKeypair(mnemonics, DEFAULT_ED25519_DERIVATION_PATH); + // const privateKey = keypair.getSecretKey(); + // const publicKey = keypair.getPublicKey(); + // const address = publicKey.toSuiAddress(); - const txb = new TransactionBlock(); - txb.setSender(address); - txb.setGasOwner(address); - txb.setGasPrice(10000); + // const txb = new TransactionBlock(); + // txb.setSender(address); + // txb.setGasOwner(address); + // txb.setGasPrice(10000); - const argsFinal = argsUserInput.map((ele) => { - if (ele.startsWith("0x")) { - return txb.object(ele); - } else { - return txb.pure(ele); - } - }); + // const argsFinal = argsUserInput.map((ele) => { + // if (ele.startsWith("0x")) { + // return txb.object(ele); + // } else { + // return txb.pure(ele); + // } + // }); - txb.moveCall({ - arguments: argsFinal, - target: `${packageId}::${currentModule}::${currentFunction}`, - }); + // txb.moveCall({ + // arguments: argsFinal, + // target: `${packageId}::${currentModule}::${currentFunction}`, + // }); - const txBytes = await txb.build({ client: suiClient }); + // const txBytes = await txb.build({ client: suiClient }); - const serializedSignature = (await keypair.signTransactionBlock(txBytes)).signature; + // const serializedSignature = (await keypair.signTransactionBlock(txBytes)).signature; - const response = await suiClient.executeTransactionBlock({ - transactionBlock: txBytes, - signature: [serializedSignature], - options: { - showEffects: true, - showObjectChanges: true, - showBalanceChanges: true, - showEvents: true, - showInput: true, - showRawInput: true, - }, - }); + // const response = await suiClient.executeTransactionBlock({ + // transactionBlock: txBytes, + // signature: [serializedSignature], + // options: { + // showEffects: true, + // showObjectChanges: true, + // showBalanceChanges: true, + // showEvents: true, + // showInput: true, + // showRawInput: true, + // }, + // }); - const executionStatus = response.effects?.status; - if (executionStatus?.status === "failure") { - dispatch({ type: MoveCallActionType.SET_ERROR, payload: executionStatus?.error }); - } else { - dispatch({ - type: MoveCallActionType.SET_RESPONSE, - payload: JSON.stringify(response.digest), - }); - } - return response; - } catch (err: any) { - dispatch({ type: MoveCallActionType.SET_ERROR, payload: err.message }); - return err; - } - }; + // const executionStatus = response.effects?.status; + // if (executionStatus?.status === "failure") { + // dispatch({ type: MoveCallActionType.SET_ERROR, payload: executionStatus?.error }); + // } else { + // dispatch({ + // type: MoveCallActionType.SET_RESPONSE, + // payload: JSON.stringify(response.digest), + // }); + // } + // return response; + // } catch (err: any) { + // dispatch({ type: MoveCallActionType.SET_ERROR, payload: err.message }); + // return err; + // } + // }; const navigate = useNavigate(); @@ -185,69 +181,6 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { navigate("/"); }; - // {/*

Still Developing

- //

Back

- //

Call

- //
- // Mnemonics: - // - //
- //
- // Package: - // - //
- //
- // {modulesName.length > 0 && ( - // <> - // Module: - // - // - // )} - //
- //
- // {currentModule.length > 0 && ( - // <> - // Function: - // - // - // )} - //
- // {currentFunction.length > 0 && ( - // <> - //

Args

- // {args.map((arg, index) => { - // return ( - //
- // handleSetValueToArg(index, e.target.value)} - // /> - // {/* value need to set like above if not will have bug when choose between functions */} - //
- // ); - // })} - // - // )} - - // - // {status === MoveCallStatus.FINISH &&

Result: ${response}

} - // {status === MoveCallStatus.ERROR &&

Error: ${error}

} */} - return ( <>
@@ -262,22 +195,18 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => {
-
+
Input Package
-
-
-
- input your package here -
+
@@ -306,23 +235,64 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { text="Copy" />
-
+ {/*
Module
-
-
+
*/} + + {modulesName.length > 0 && ( + <> + + + )} + + {/*
Function
-
+
*/} + + {currentModule.length > 0 && ( + <> + + + )} +
Args
-
+ {currentFunction.length > 0 && ( + <> + {args.map((arg, index) => { + return ( +
+ handleSetValueToArg(index, e.target.value)} /> + {/* value need to set like above if not will have bug when choose between functions */} +
+ ); + })} + + )} + {/*
U64
@@ -336,13 +306,15 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => {
Hero
-
+
*/}
Call
+ {status === MoveCallStatus.FINISH &&

Result: ${response}

} + {status === MoveCallStatus.ERROR &&

Error: ${error}

} diff --git a/webview-ui/src/features/moveCall/v2/index.tsx b/webview-ui/src/features/moveCall/v2/index.tsx index 1fef5ed..8cd44de 100644 --- a/webview-ui/src/features/moveCall/v2/index.tsx +++ b/webview-ui/src/features/moveCall/v2/index.tsx @@ -4,7 +4,6 @@ import { MoveCallActionType, MoveCallStatus } from "../../../../../src/enums"; import { ActionType, MoveCallState } from "../../../types"; const initialState: MoveCallState = { - mnemonics: "mouse hood crucial soup report axis awful point stairs guess scrap winter", status: MoveCallStatus.BEGIN, packageId: "", modules: [], @@ -20,11 +19,6 @@ const initialState: MoveCallState = { const reducer = (state: MoveCallState, action: ActionType): MoveCallState => { const { type, payload } = action; switch (type) { - case MoveCallActionType.SET_MNEMONICS: - return { - ...state, - mnemonics: payload, - }; case MoveCallActionType.SET_PACKAGE_ID: return { ...state, diff --git a/webview-ui/src/types/index.ts b/webview-ui/src/types/index.ts index 8dbdf29..bfbd594 100644 --- a/webview-ui/src/types/index.ts +++ b/webview-ui/src/types/index.ts @@ -7,7 +7,6 @@ export interface ActionType { } export interface MoveCallState { - mnemonics: string; status: MoveCallStatus; packageId: string; modules: string[]; From 6e9bd35fc27937b81a2183f031dcb82145cbb12b Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 00:04:26 +0700 Subject: [PATCH 03/13] feat: call function CLI & update sui binaries path --- src/enums/index.ts | 1 + src/extension.ts | 55 ++++++++++++++++--- .../src/features/moveCall/v2/MoveCall.tsx | 26 ++++++++- .../src/features/suiConfig/v2/index.tsx | 9 +++ 4 files changed, 79 insertions(+), 12 deletions(-) diff --git a/src/enums/index.ts b/src/enums/index.ts index 60e1da9..60453da 100644 --- a/src/enums/index.ts +++ b/src/enums/index.ts @@ -26,4 +26,5 @@ export enum SuiCommand { SWITCH_NETWORK = "SWITCH_NETWORK", GET_NETWORKS = "GET_NETWORKS", PUBLISH_PACKAGE = "PUBLISH_PACKAGE", + CALL_FUNCTION = "CALL_FUNCTION", } \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index c38979c..ee859de 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,10 +11,10 @@ import { SuiCommand } from './enums'; interface MyCustomTerminalResponse { stdout: string; stderr: { - message: string; - isError: boolean; + message: string; + isError: boolean; }; - } +} // This method is called when your extension is activated // Your extension is activated the very first time the command is executed @@ -73,9 +73,17 @@ export function activate(context: vscode.ExtensionContext) { })); } +let suiPath = "sui"; + export const handleReceivedMessage = async (message: any, webView: any, context: any) => { const { command, requestId, payload } = message; + console.log(suiPath); + switch (command) { + case "CHANGE_SUI_PATH": + suiPath = payload.suiPath; + console.log(suiPath); + break; case "SUI_TERMINAL": let resp = { stderr: "", @@ -93,7 +101,7 @@ export const handleReceivedMessage = async (message: any, webView: any, context: switch (payload.cmd) { case SuiCommand.GET_ADDRESSES: - resp = await execNew("sui client addresses --json"); + resp = await execNew(`${suiPath} client addresses --json`); finalResp = { stderr: { @@ -105,7 +113,7 @@ export const handleReceivedMessage = async (message: any, webView: any, context: break; case SuiCommand.GET_GAS_OBJECTS: try { - resp = await execNew("sui client gas --json"); + resp = await execNew(`${suiPath} client gas --json`); finalResp = { stderr: { @@ -120,7 +128,7 @@ export const handleReceivedMessage = async (message: any, webView: any, context: break; case SuiCommand.SWITCH_ADDRESS: - resp = await execNew(`sui client switch --address ${payload.address}`); + resp = await execNew(`${suiPath} client switch --address ${payload.address}`); finalResp = { stderr: { @@ -131,7 +139,7 @@ export const handleReceivedMessage = async (message: any, webView: any, context: }; break; case SuiCommand.GET_NETWORKS: - resp = await execNew("sui client envs --json"); + resp = await execNew(`${suiPath} client envs --json`); finalResp = { stderr: { @@ -142,7 +150,7 @@ export const handleReceivedMessage = async (message: any, webView: any, context: }; break; case SuiCommand.SWITCH_NETWORK: - resp = await execNew(`sui client switch --env ${payload.network}`); + resp = await execNew(`${suiPath} client switch --env ${payload.network}`); finalResp = { stderr: { @@ -154,7 +162,36 @@ export const handleReceivedMessage = async (message: any, webView: any, context: break; case SuiCommand.PUBLISH_PACKAGE: try { - resp = await execNew(`/home/asus/Workspace/sui-testnet-v1.22.0/target/release/sui-ubuntu-x86_64 client publish --gas ${payload.gasObjectId} --gas-budget ${payload.gasBudget} ${vscode.workspace.workspaceFolders?.[0].uri.path} --json --skip-fetch-latest-git-deps --skip-dependency-verification`); + resp = await execNew(`${suiPath} client publish --gas ${payload.gasObjectId} --gas-budget ${payload.gasBudget} ${vscode.workspace.workspaceFolders?.[0].uri.path} --json --skip-fetch-latest-git-deps --skip-dependency-verification`); + + finalResp = { + stderr: { + message: resp.stderr, + isError: false + }, + stdout: resp.stdout + }; + + console.log("stderr:", finalResp.stderr); + console.log("stdout:", finalResp.stdout); + } catch (err: any) { + console.log(err.message); + finalResp = { + stderr: { + message: err.message, + isError: true + }, + stdout: "" + }; + + } + + break; + + case SuiCommand.CALL_FUNCTION: + try { + resp = await execNew(`${suiPath} client call --package ${payload.packageId} --module ${payload.moduleName} --function ${payload.functionName} --json --gas-budget 10000000 ${payload.args.length > 0 ? "--args" : ""} ${payload.args?.join(" ")} + `); finalResp = { stderr: { diff --git a/webview-ui/src/features/moveCall/v2/MoveCall.tsx b/webview-ui/src/features/moveCall/v2/MoveCall.tsx index 5a9c0e0..a916a85 100644 --- a/webview-ui/src/features/moveCall/v2/MoveCall.tsx +++ b/webview-ui/src/features/moveCall/v2/MoveCall.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from "react"; import { ActionType, MoveCallState } from "../../../types"; import { Input } from "../../../components/Input"; -import { MoveCallActionType, MoveCallStatus } from "../../../../../src/enums"; +import { MoveCallActionType, MoveCallStatus, SuiCommand } from "../../../../../src/enums"; import { useSuiClient, useSuiClientContext } from "@mysten/dapp-kit"; import { Button } from "../../../components/Button"; import { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519"; @@ -11,6 +11,7 @@ import { ArrowDown } from "../../../icons/ArrowDown"; import { Label } from "../../../components/Label"; import { ArrowLeft } from "../../../icons/ArrowLeft"; import { shortenAddress, shortenObjectType } from "../../../utils/address_shortener"; +import { requestDataFromTerminal } from "../../../utils/wv_communicate_ext"; export interface IMoveCallProps { state: MoveCallState; @@ -175,6 +176,25 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { // } // }; + const handleCall = async () => { + try { + const resp = await requestDataFromTerminal({ + cmd: SuiCommand.CALL_FUNCTION, + packageId, + moduleName: currentModule, + functionName: currentFunction, + args: argsUserInput, + }); + const { stdout, stderr } = resp; + // const objects = JSON.parse(stdout); + console.log(stdout); + console.log(stderr); + dispatch({ type: MoveCallActionType.SET_RESPONSE, payload: stdout }); + } catch (err: any) { + dispatch({ type: MoveCallActionType.SET_ERROR, payload: err.message }); + } + } + const navigate = useNavigate(); const handleNavigate = () => { @@ -308,11 +328,11 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { */} -
+
+ {status === MoveCallStatus.FINISH &&

Result: ${response}

} {status === MoveCallStatus.ERROR &&

Error: ${error}

} diff --git a/webview-ui/src/features/suiConfig/v2/index.tsx b/webview-ui/src/features/suiConfig/v2/index.tsx index d48046e..4f79958 100644 --- a/webview-ui/src/features/suiConfig/v2/index.tsx +++ b/webview-ui/src/features/suiConfig/v2/index.tsx @@ -9,6 +9,7 @@ import { requestDataFromTerminal } from "../../../utils/wv_communicate_ext"; import { SuiCommand } from "../../../../../src/enums"; import { ArrowLeft } from "../../../icons/ArrowLeft"; import { useNavigate } from "react-router-dom"; +import { messageHandler } from "@estruyf/vscode/dist/client"; export const SuiConfig = () => { const { network, selectNetwork } = useSuiClientContext(); @@ -32,6 +33,14 @@ export const SuiConfig = () => { setIsLoading(false); }; + useEffect(() => { + if (isSuiCargo) { + messageHandler.send("CHANGE_SUI_PATH", { suiPath: "sui" }); + } else { + messageHandler.send("CHANGE_SUI_PATH", { suiPath }); + } + }, [suiPath, isSuiCargo]) + useEffect(() => { async function getUserNetworks() { setIsLoading(true); From 5588fb5b1b409d24a42f520b86b73d97b5a6e216 Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 16:06:43 +0700 Subject: [PATCH 04/13] chore: remove unused files & rename some component --- README.md | 7 - package.json | 3 +- webview-ui/src/App.tsx | 82 +++++----- webview-ui/src/constants.ts | 0 ...onfigProvider.tsx => MySuiEnvProvider.tsx} | 18 +-- .../buildTestPublish/{v2 => }/index.tsx | 19 +-- .../features/buildTestPublish/v1/index.tsx | 10 -- webview-ui/src/features/moveCall/v1/index.tsx | 151 ------------------ .../v2 => packageExplorer}/MoveCall.tsx | 18 +-- .../v2 => packageExplorer}/index.tsx | 7 +- .../src/features/suiConfig/v1/index.tsx | 28 ---- .../{suiConfig/v2 => suiEnv}/index.tsx | 16 +- webview-ui/src/index.tsx | 16 +- webview-ui/src/style.css | 3 - 14 files changed, 84 insertions(+), 294 deletions(-) delete mode 100644 webview-ui/src/constants.ts rename webview-ui/src/context/{SuiConfigProvider.tsx => MySuiEnvProvider.tsx} (54%) rename webview-ui/src/features/buildTestPublish/{v2 => }/index.tsx (96%) delete mode 100644 webview-ui/src/features/buildTestPublish/v1/index.tsx delete mode 100644 webview-ui/src/features/moveCall/v1/index.tsx rename webview-ui/src/features/{moveCall/v2 => packageExplorer}/MoveCall.tsx (97%) rename webview-ui/src/features/{moveCall/v2 => packageExplorer}/index.tsx (95%) delete mode 100644 webview-ui/src/features/suiConfig/v1/index.tsx rename webview-ui/src/features/{suiConfig/v2 => suiEnv}/index.tsx (94%) delete mode 100644 webview-ui/src/style.css diff --git a/README.md b/README.md index 8a0a776..a0c56d4 100644 --- a/README.md +++ b/README.md @@ -28,10 +28,3 @@ Open Sui-simulator extension: You can open by Command Palette if you're using on * Add address and gas: You can create new address by import an existing seed phrase or generate new one * Build, test and Publish: publish your package ID on the Sui network. * Package Explorer: Developers can examine modules, functions, and make calls to them - --- -## Following extension guidelines - -Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. - -* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) diff --git a/package.json b/package.json index 79adfe7..256ef41 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "sui-simulator-vscode", - "displayName": "sui-simulator-vscode", + "displayName": "sui-simulator", + "publisher": "weminal-labs", "description": "", "version": "0.3.0", "repository": "https://github.com/Weminal-labs/sui-simulator-vscode", diff --git a/webview-ui/src/App.tsx b/webview-ui/src/App.tsx index 3003193..4410d3c 100644 --- a/webview-ui/src/App.tsx +++ b/webview-ui/src/App.tsx @@ -1,7 +1,4 @@ import React from "react"; -import "./style.css"; -import { SuiConfigProvider } from "./context/SuiConfigProvider"; -import { MySuiAccountProvider } from "./context/MySuiAccountProvider"; import { EnvironmentIcon } from "./icons/EnvironmentIcon"; import { Tab } from "./components/Tab"; import { UserIcon } from "./icons/UserIcon"; @@ -9,54 +6,47 @@ import { RowVerticalIcon } from "./icons/RowVerticalIcon"; import { ExplorerIcon } from "./icons/ExplorerIcon"; import { Link } from "react-router-dom"; -export interface IAppProps {} +export interface IAppProps { } -export const App: React.FunctionComponent = ({}: React.PropsWithChildren) => { +export const App: React.FunctionComponent = ({ }: React.PropsWithChildren) => { return ( <> - - - {/* */} - -
-
-
-
- Sui simulator -
-
- - } - title="Environment" - /> - - {/* */} - - } - title="Gases And Address" - /> - - {/* */} - - } - title="Build, Test And Publish" - /> - - - } - title="Explorer" - /> - -
-
+ {/* */} +
+
+
+
+ Sui simulator +
+
+ + } + title="Environment" + /> + + + } + title="Gases And Address" + /> + + + } + title="Build, Test And Publish" + /> + + + } + title="Explorer" + /> +
- - +
+
); }; diff --git a/webview-ui/src/constants.ts b/webview-ui/src/constants.ts deleted file mode 100644 index e69de29..0000000 diff --git a/webview-ui/src/context/SuiConfigProvider.tsx b/webview-ui/src/context/MySuiEnvProvider.tsx similarity index 54% rename from webview-ui/src/context/SuiConfigProvider.tsx rename to webview-ui/src/context/MySuiEnvProvider.tsx index 236506b..f008fb4 100644 --- a/webview-ui/src/context/SuiConfigProvider.tsx +++ b/webview-ui/src/context/MySuiEnvProvider.tsx @@ -1,34 +1,34 @@ import React, { useState } from "react"; import { createContext, useContext } from "react"; -export type SuiConfigContextType = { +export type MySuiEnvContextType = { isSuiCargo: boolean; setIsSuiCargo: React.Dispatch>; suiPath: string; setSuiPath: React.Dispatch>; }; -const SuiConfigContext = createContext(null); +const MySuiEnvContext = createContext(null); -export const SuiConfigProvider: React.FC<{ children: React.ReactNode }> = ({ +export const MySuiEnvProvider: React.FC<{ children: React.ReactNode }> = ({ children, }) => { const [isSuiCargo, setIsSuiCargo] = useState(false); const [suiPath, setSuiPath] = useState(""); return ( - {children} - + ); }; -export const useSuiConfig = () => { - const context = useContext(SuiConfigContext); +export const useMySuiEnv = () => { + const context = useContext(MySuiEnvContext); if (context === undefined) { - throw new Error('useSuiConfig must be used within a SuiConfigProvider'); + throw new Error('useMySuiEnv must be used within a MySuiEnvProvider'); } - return context as SuiConfigContextType;; + return context as MySuiEnvContextType;; }; diff --git a/webview-ui/src/features/buildTestPublish/v2/index.tsx b/webview-ui/src/features/buildTestPublish/index.tsx similarity index 96% rename from webview-ui/src/features/buildTestPublish/v2/index.tsx rename to webview-ui/src/features/buildTestPublish/index.tsx index 4058f1c..5a56e64 100644 --- a/webview-ui/src/features/buildTestPublish/v2/index.tsx +++ b/webview-ui/src/features/buildTestPublish/index.tsx @@ -1,12 +1,12 @@ import React, { useState } from "react"; -import { useMySuiAccount } from "../../../context/MySuiAccountProvider"; -import { requestDataFromTerminal } from "../../../utils/wv_communicate_ext"; -import { SuiCommand } from "../../../../../src/enums"; +import { useMySuiAccount } from "../../context/MySuiAccountProvider"; +import { requestDataFromTerminal } from "../../utils/wv_communicate_ext"; +import { SuiCommand } from "../../../../src/enums"; import { useNavigate } from "react-router-dom"; -import { Label } from "../../../components/Label"; -import { ArrowLeft } from "../../../icons/ArrowLeft"; -import { shortenAddress, shortenObjectType } from "../../../utils/address_shortener"; -import { Error } from "../../../components/Error"; +import { Label } from "../../components/Label"; +import { ArrowLeft } from "../../icons/ArrowLeft"; +import { shortenAddress, shortenObjectType } from "../../utils/address_shortener"; +import { Error } from "../../components/Error"; export const BuildTestPublish = () => { const { currentAddress, currentGasObject } = useMySuiAccount(); @@ -210,10 +210,7 @@ export const BuildTestPublish = () => { {isError && } {!isError && ( <> -
Transaction: {currentDigest}
- -

Effects:

- {/* Package id: {packageId} */} + {currentDigest &&
Transaction: {currentDigest}
}
{uniquePackages.map((pkg) => { diff --git a/webview-ui/src/features/buildTestPublish/v1/index.tsx b/webview-ui/src/features/buildTestPublish/v1/index.tsx deleted file mode 100644 index 34135e0..0000000 --- a/webview-ui/src/features/buildTestPublish/v1/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -{/*

Build

- setBuildPath(e.target.value)} /> - -

Publish

- setPublishPath(e.target.value)} /> - */} \ No newline at end of file diff --git a/webview-ui/src/features/moveCall/v1/index.tsx b/webview-ui/src/features/moveCall/v1/index.tsx deleted file mode 100644 index c5f0817..0000000 --- a/webview-ui/src/features/moveCall/v1/index.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import React, { useState } from 'react'; -import { Button } from '../../../components/Button'; -import { Input } from '../../../components/Input'; -import { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair } from '@mysten/sui.js/keypairs/ed25519'; -import { TransactionArgument, TransactionBlock } from '@mysten/sui.js/transactions'; -import { useSuiClient } from '@mysten/dapp-kit'; - -export default function index() { - const suiClient = useSuiClient(); - - const [mnemonics, setMnemonics] = useState("mouse hood crucial soup report axis awful point stairs guess scrap winter"); - - const [packageId, setPackageId] = useState("0xcab68c8cd7e80f3dd06466da6b2c083d1fd50ab3e9be8e32395c19b53021c064"); - const [module, setModule] = useState("counter"); - const [functionName, setFunctionName] = useState("create"); - const [args, setArgs] = useState([]); - - const [error, setError] = useState(""); - const [isError, setIsError] = useState(false); - const [response, setResponse] = useState(""); - - let keypair: Ed25519Keypair | null = null; - - const handleAddArgs = () => { - setArgs((prevArgs) => [...prevArgs, { - index: null, - kind: "Input", - value: null, - type: null - }]); - }; - - const handleDeleteArgs = (index: number) => { - setArgs((prevArgs) => prevArgs.filter((_, i) => i !== index)); - }; - - const handleMnemonicsChange = (e: React.ChangeEvent) => { - setMnemonics(e.target.value); - }; - - const handleCall = async () => { - try { - keypair = Ed25519Keypair.deriveKeypair( - mnemonics, - DEFAULT_ED25519_DERIVATION_PATH, - ); - const privateKey = keypair.getSecretKey(); - const publicKey = keypair.getPublicKey(); - const address = publicKey.toSuiAddress(); - - const txb = new TransactionBlock(); - txb.setSender(address); - txb.setGasOwner(address); - txb.setGasPrice(10000); - - // add arguments to the transaction - for (const arg of args) { - if (arg.type === "object") { - txb.object(arg.value); - } else { - txb.pure(arg.value); - } - } - - txb.moveCall({ - arguments: args, - target: `${packageId}::${module}::${functionName}` - }); - - const txBytes = await txb.build({ client: suiClient }); - - const serializedSignature = (await keypair.signTransactionBlock(txBytes)) - .signature; - - const response = await suiClient.executeTransactionBlock({ - transactionBlock: txBytes, - signature: [serializedSignature], - options: { - showEffects: true, - showObjectChanges: true, - showBalanceChanges: true, - showEvents: true, - showInput: true, - showRawInput: true, - }, - }); - - setIsError(false); - - const executionStatus = response.effects?.status; - if (executionStatus?.status === "failure") { - setError(executionStatus?.error); - } else { - setResponse(JSON.stringify(response.digest)); - } - return response; - } catch (err: any) { - setIsError(true); - setError(err.message); - return err; - } - }; - - return ( - <> -

Call

-
- Mnemonics: - -
-
- Package: - setPackageId(e.target.value)} /> -
-
- Module: - setModule(e.target.value)} /> -
-
- Function: - setFunctionName(e.target.value)} /> -
-

Args

- {args.map((arg, index) => { - return <> { - const newArgs = [...args]; - newArgs[index] = { - ...newArgs[index], - index, - value: e.target.value, - type: e.target.value.startsWith("0x") ? "object" : "pure" - }; - setArgs((newArgs)); - }} /> - - ; - } - - )} - - - {!isError ?

Result: {response}

:

Error: {error}

} - - ); -}; diff --git a/webview-ui/src/features/moveCall/v2/MoveCall.tsx b/webview-ui/src/features/packageExplorer/MoveCall.tsx similarity index 97% rename from webview-ui/src/features/moveCall/v2/MoveCall.tsx rename to webview-ui/src/features/packageExplorer/MoveCall.tsx index a916a85..c2ae565 100644 --- a/webview-ui/src/features/moveCall/v2/MoveCall.tsx +++ b/webview-ui/src/features/packageExplorer/MoveCall.tsx @@ -1,17 +1,17 @@ import React, { useEffect } from "react"; -import { ActionType, MoveCallState } from "../../../types"; -import { Input } from "../../../components/Input"; -import { MoveCallActionType, MoveCallStatus, SuiCommand } from "../../../../../src/enums"; +import { ActionType, MoveCallState } from "../../types"; +import { Input } from "../../components/Input"; +import { MoveCallActionType, MoveCallStatus, SuiCommand } from "../../../../src/enums"; import { useSuiClient, useSuiClientContext } from "@mysten/dapp-kit"; -import { Button } from "../../../components/Button"; +import { Button } from "../../components/Button"; import { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519"; import { TransactionBlock } from "@mysten/sui.js/transactions"; import { useNavigate } from "react-router-dom"; -import { ArrowDown } from "../../../icons/ArrowDown"; -import { Label } from "../../../components/Label"; -import { ArrowLeft } from "../../../icons/ArrowLeft"; -import { shortenAddress, shortenObjectType } from "../../../utils/address_shortener"; -import { requestDataFromTerminal } from "../../../utils/wv_communicate_ext"; +import { ArrowDown } from "../../icons/ArrowDown"; +import { Label } from "../../components/Label"; +import { ArrowLeft } from "../../icons/ArrowLeft"; +import { shortenAddress, shortenObjectType } from "../../utils/address_shortener"; +import { requestDataFromTerminal } from "../../utils/wv_communicate_ext"; export interface IMoveCallProps { state: MoveCallState; diff --git a/webview-ui/src/features/moveCall/v2/index.tsx b/webview-ui/src/features/packageExplorer/index.tsx similarity index 95% rename from webview-ui/src/features/moveCall/v2/index.tsx rename to webview-ui/src/features/packageExplorer/index.tsx index 8cd44de..b62c4dc 100644 --- a/webview-ui/src/features/moveCall/v2/index.tsx +++ b/webview-ui/src/features/packageExplorer/index.tsx @@ -1,7 +1,7 @@ import React, { useReducer } from "react"; import { MoveCall } from "./MoveCall"; -import { MoveCallActionType, MoveCallStatus } from "../../../../../src/enums"; -import { ActionType, MoveCallState } from "../../../types"; +import { MoveCallActionType, MoveCallStatus } from "../../../../src/enums"; +import { ActionType, MoveCallState } from "../../types"; const initialState: MoveCallState = { status: MoveCallStatus.BEGIN, @@ -93,7 +93,8 @@ const reducer = (state: MoveCallState, action: ActionType): MoveCallState => { } }; -export default function index() { +export const PackageExplorer = () => { const [state, dispatch] = useReducer(reducer, initialState); return ; } + diff --git a/webview-ui/src/features/suiConfig/v1/index.tsx b/webview-ui/src/features/suiConfig/v1/index.tsx deleted file mode 100644 index 6e1c00c..0000000 --- a/webview-ui/src/features/suiConfig/v1/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { useState } from "react"; -import { Input } from "../../../components/Input"; -import { useSuiClientContext } from "@mysten/dapp-kit"; - -export default function index() { - const { network, selectNetwork } = useSuiClientContext(); - const [suiPath, setSuiPath] = useState(""); - - const handleNetworkChange = (e: React.ChangeEvent) => { - selectNetwork(e.target.value); - }; - - return ( - <> -

Setup Sui

- setSuiPath(e.target.value)} - /> -

Network

- - - ); -} diff --git a/webview-ui/src/features/suiConfig/v2/index.tsx b/webview-ui/src/features/suiEnv/index.tsx similarity index 94% rename from webview-ui/src/features/suiConfig/v2/index.tsx rename to webview-ui/src/features/suiEnv/index.tsx index 4f79958..d2a21cd 100644 --- a/webview-ui/src/features/suiConfig/v2/index.tsx +++ b/webview-ui/src/features/suiEnv/index.tsx @@ -1,19 +1,19 @@ import React, { useEffect, useRef, useState } from "react"; import Toggle from "react-toggle"; import "react-toggle/style.css"; -import { convertWindowsToUnixPath } from "../../../utils"; -import { FileWithPath } from "../../../types"; +import { convertWindowsToUnixPath } from "../../utils"; +import { FileWithPath } from "../../types"; import { useSuiClientContext } from "@mysten/dapp-kit"; -import { useSuiConfig } from "../../../context/SuiConfigProvider"; -import { requestDataFromTerminal } from "../../../utils/wv_communicate_ext"; -import { SuiCommand } from "../../../../../src/enums"; -import { ArrowLeft } from "../../../icons/ArrowLeft"; +import { useMySuiEnv } from "../../context/MySuiEnvProvider"; +import { requestDataFromTerminal } from "../../utils/wv_communicate_ext"; +import { SuiCommand } from "../../../../src/enums"; +import { ArrowLeft } from "../../icons/ArrowLeft"; import { useNavigate } from "react-router-dom"; import { messageHandler } from "@estruyf/vscode/dist/client"; -export const SuiConfig = () => { +export const SuiEnv = () => { const { network, selectNetwork } = useSuiClientContext(); - const { isSuiCargo, setIsSuiCargo, suiPath, setSuiPath } = useSuiConfig(); + const { isSuiCargo, setIsSuiCargo, suiPath, setSuiPath } = useMySuiEnv(); const [userNetworks, setUserNetworks] = useState([]); // type later const [isLoading, setIsLoading] = useState(false); diff --git a/webview-ui/src/index.tsx b/webview-ui/src/index.tsx index 0be6105..bf3b602 100644 --- a/webview-ui/src/index.tsx +++ b/webview-ui/src/index.tsx @@ -6,12 +6,12 @@ import { Route, MemoryRouter, Routes } from "react-router-dom"; import { SuiClientProvider } from "@mysten/dapp-kit"; import { networkConfig } from "./configs/networkConfig"; import { RootLayout } from "./RootLayout"; -import { SuiConfig } from "./features/suiConfig/v2"; +import { SuiEnv } from "./features/suiEnv"; import { GasAddress } from "./features/gasAddress/"; -import { BuildTestPublish } from "./features/buildTestPublish/v2"; -import { SuiConfigProvider } from "./context/SuiConfigProvider"; +import { BuildTestPublish } from "./features/buildTestPublish"; +import { MySuiEnvProvider } from "./context/MySuiEnvProvider"; import { MySuiAccountProvider } from "./context/MySuiAccountProvider"; -import Explorer from "./features/moveCall/v2/index"; +import { PackageExplorer } from "./features/packageExplorer/index"; declare const acquireVsCodeApi: () => { getState: () => T; @@ -26,21 +26,21 @@ if (root) { root.render( - + }> } /> - } /> + } /> } /> } /> - } /> + } /> - + ); diff --git a/webview-ui/src/style.css b/webview-ui/src/style.css deleted file mode 100644 index 3944a4c..0000000 --- a/webview-ui/src/style.css +++ /dev/null @@ -1,3 +0,0 @@ -h1 { - font-family: var(--vscode-editor-font-family); -} \ No newline at end of file From 0dae51a45160ab3e8594c03d620428dba988b271 Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 17:02:38 +0700 Subject: [PATCH 05/13] fix: bug when choose sui path --- webview-ui/src/context/MySuiEnvProvider.tsx | 8 ++--- webview-ui/src/features/suiEnv/index.tsx | 40 ++++++++++----------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/webview-ui/src/context/MySuiEnvProvider.tsx b/webview-ui/src/context/MySuiEnvProvider.tsx index f008fb4..444c9b4 100644 --- a/webview-ui/src/context/MySuiEnvProvider.tsx +++ b/webview-ui/src/context/MySuiEnvProvider.tsx @@ -2,8 +2,8 @@ import React, { useState } from "react"; import { createContext, useContext } from "react"; export type MySuiEnvContextType = { - isSuiCargo: boolean; - setIsSuiCargo: React.Dispatch>; + isSuiFile: boolean; + setIsSuiFile: React.Dispatch>; suiPath: string; setSuiPath: React.Dispatch>; }; @@ -13,12 +13,12 @@ const MySuiEnvContext = createContext(null); export const MySuiEnvProvider: React.FC<{ children: React.ReactNode }> = ({ children, }) => { - const [isSuiCargo, setIsSuiCargo] = useState(false); + const [isSuiFile, setIsSuiFile] = useState(false); const [suiPath, setSuiPath] = useState(""); return ( {children} diff --git a/webview-ui/src/features/suiEnv/index.tsx b/webview-ui/src/features/suiEnv/index.tsx index d2a21cd..b4c915f 100644 --- a/webview-ui/src/features/suiEnv/index.tsx +++ b/webview-ui/src/features/suiEnv/index.tsx @@ -13,7 +13,7 @@ import { messageHandler } from "@estruyf/vscode/dist/client"; export const SuiEnv = () => { const { network, selectNetwork } = useSuiClientContext(); - const { isSuiCargo, setIsSuiCargo, suiPath, setSuiPath } = useMySuiEnv(); + const { isSuiFile, setIsSuiFile, suiPath, setSuiPath } = useMySuiEnv(); const [userNetworks, setUserNetworks] = useState([]); // type later const [isLoading, setIsLoading] = useState(false); @@ -33,13 +33,19 @@ export const SuiEnv = () => { setIsLoading(false); }; + const handleNavigate = () => { + navigate("/"); + }; + + const handleToogle = (e: React.ChangeEvent) => { + setIsSuiFile(e.target.checked) + } + useEffect(() => { - if (isSuiCargo) { + if (!isSuiFile) { messageHandler.send("CHANGE_SUI_PATH", { suiPath: "sui" }); - } else { - messageHandler.send("CHANGE_SUI_PATH", { suiPath }); } - }, [suiPath, isSuiCargo]) + }, [isSuiFile]) useEffect(() => { async function getUserNetworks() { @@ -59,10 +65,6 @@ export const SuiEnv = () => { getUserNetworks(); }, []); - const handleNavigate = () => { - navigate("/"); - }; - useEffect(() => { // fileInputRef?.current?.setAttribute("directory", ""); // fileInputRef?.current?.setAttribute("webkitdirectory", ""); @@ -75,6 +77,7 @@ export const SuiEnv = () => { console.log( convertWindowsToUnixPath((fileInputRef.current?.files?.item(0) as FileWithPath)?.path) ); + messageHandler.send("CHANGE_SUI_PATH", { suiPath: convertWindowsToUnixPath((fileInputRef.current?.files?.item(0) as FileWithPath)?.path) }); }); }, [fileInputRef]); @@ -97,26 +100,19 @@ export const SuiEnv = () => {
- Sui Cargo + Binaries
setIsSuiCargo(e.target.checked)} + onChange={handleToogle} />
- {!isSuiCargo && ( - <> -
-
- -
-
-
{suiPath &&

{suiPath}

}
- - )} + {/* not sure why bug if use conditional rendering? when this input element is not rendered for first time, the ref to this element will always be null */} + +
{isSuiFile && suiPath &&

{suiPath}

}
{isLoading ? ( "Loading" ) : ( From 2c5d63115801b4ea0002273f0356cfef647956d4 Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 17:31:13 +0700 Subject: [PATCH 06/13] feat: request faucet --- src/enums/index.ts | 1 + src/extension.ts | 28 ++++++++++++++++++++ webview-ui/src/features/gasAddress/gas.tsx | 30 +++++++++++++++++++--- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/enums/index.ts b/src/enums/index.ts index 60453da..fa34be5 100644 --- a/src/enums/index.ts +++ b/src/enums/index.ts @@ -27,4 +27,5 @@ export enum SuiCommand { GET_NETWORKS = "GET_NETWORKS", PUBLISH_PACKAGE = "PUBLISH_PACKAGE", CALL_FUNCTION = "CALL_FUNCTION", + REQUEST_FAUCET = "REQUEST_FAUCET", } \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index ee859de..25b752a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -216,6 +216,34 @@ export const handleReceivedMessage = async (message: any, webView: any, context: } break; + + case SuiCommand.REQUEST_FAUCET: + try { + resp = await execNew(`${suiPath} client faucet + `); + + finalResp = { + stderr: { + message: resp.stderr, + isError: false + }, + stdout: resp.stdout + }; + + console.log("stderr:", finalResp.stderr); + console.log("stdout:", finalResp.stdout); + } catch (err: any) { + console.log(err.message); + finalResp = { + stderr: { + message: err.message, + isError: true + }, + stdout: "" + }; + + } + break; } // Do something with the payload diff --git a/webview-ui/src/features/gasAddress/gas.tsx b/webview-ui/src/features/gasAddress/gas.tsx index 931ad71..4db2e7f 100644 --- a/webview-ui/src/features/gasAddress/gas.tsx +++ b/webview-ui/src/features/gasAddress/gas.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import { requestDataFromTerminal } from "../../utils/wv_communicate_ext"; import { SuiCommand } from "../../../../src/enums"; -import { useSuiClientContext } from "@mysten/dapp-kit"; +import { useSuiClient, useSuiClientContext } from "@mysten/dapp-kit"; import { useMySuiAccount } from "../../context/MySuiAccountProvider"; import { shortenAddress } from "../../utils/address_shortener"; @@ -13,12 +13,34 @@ export interface GasObject { export const Gas = () => { // remember that then change UI in here need to call to terminal const { network } = useSuiClientContext(); + const suiClient = useSuiClient(); const { currentAddress, currentGasObject, gasObjects, setCurrentGasObject, setGasObjects } = useMySuiAccount(); const [isLoading, setIsLoading] = useState(false); + const [reload, setReload] = useState(1); - const requestFaucet = () => {}; + const requestFaucet = async () => { + const resp = await requestDataFromTerminal({ + cmd: SuiCommand.REQUEST_FAUCET, + }); + const { stdout, stderr } = resp; + setIsLoading(true); + setTimeout(() => { + setReload(Math.random()) + setIsLoading(false); + }, 10000) + }; + + // useEffect(() => { + // async function getGasObjects() { + // const resp = await suiClient.getAllCoins({ owner: currentAddress }) + // console.log(resp); + // } + // if (currentAddress) { + // getGasObjects(); + // } + // }, [currentAddress]) useEffect(() => { async function getGasObjects() { @@ -33,7 +55,7 @@ export const Gas = () => { // console.log(objects); } getGasObjects(); - }, [network, currentAddress]); + }, [network, currentAddress, reload]); const balanceOfCurrentGasObject = gasObjects.find( (gasObject) => gasObject.gasCoinId === currentGasObject @@ -95,7 +117,7 @@ export const Gas = () => {
)} - -
-
-
-
- Output -
-
-
-
-
- Output... -
-
-
-
- {status === MoveCallStatus.FINISH &&

Result: ${response}

} - {status === MoveCallStatus.ERROR &&

Error: ${error}

}
- + } + + {status === MoveCallStatus.FINISH &&

Result: ${response}

} + {status === MoveCallStatus.ERROR && } From ea81e884b20a688bd11e0d6c71fc1e667da59d72 Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 23:18:58 +0700 Subject: [PATCH 11/13] feat: update MoveCall --- .../src/features/packageExplorer/MoveCall.tsx | 126 +++++++++++++++++- 1 file changed, 124 insertions(+), 2 deletions(-) diff --git a/webview-ui/src/features/packageExplorer/MoveCall.tsx b/webview-ui/src/features/packageExplorer/MoveCall.tsx index 3f2a8f9..4e81db4 100644 --- a/webview-ui/src/features/packageExplorer/MoveCall.tsx +++ b/webview-ui/src/features/packageExplorer/MoveCall.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from "react"; +import React, { useEffect, useState } from "react"; import { MoveCallState } from "../../types"; import { MoveCallActionType, MoveCallStatus, SuiCommand } from "../../../../src/enums"; import { useSuiClient, useSuiClientContext } from "@mysten/dapp-kit"; @@ -32,6 +32,7 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { } = state; const [isPackageIdValid, setIsPackageIdValid] = React.useState(false); + const [objects, setObjects] = useState([]); // set type later const handlePackageIdChange = (e: React.ChangeEvent) => { dispatch({ type: MoveCallActionType.SET_PACKAGE_ID, payload: e.target.value }); @@ -128,6 +129,15 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { }); const { stdout, stderr } = resp; // const objects = JSON.parse(stdout); + + if (stderr.isError) { + dispatch({ type: MoveCallActionType.SET_ERROR, payload: stderr.message }); + } else { + const { digest, objectChanges } = JSON.parse(stdout); + setObjects(objectChanges); + console.log(digest); + console.log(objectChanges); + } console.log(stdout); console.log(stderr); dispatch({ type: MoveCallActionType.SET_RESPONSE, payload: stdout }); @@ -142,6 +152,59 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => { navigate("/"); }; + const packages = objects + .map((obj) => { + if (obj.type !== "published") { + const packageName = obj.objectType.split("::")[0]; + return packageName; + } + }) + .filter((item) => item !== undefined); + + let uniquePackages = [...new Set(packages)]; + + uniquePackages = uniquePackages.map((pkg) => { + return { + packageName: pkg, + modules: [], + }; + }); + + const getModulesOfPackage = (packageName: string) => { + console.log(packageName); + const modules = objects + .map((obj) => { + const { objectType, type } = obj; + if (type !== "published") { + console.log(objectType); + if (objectType.startsWith(packageName)) { + console.log(objectType.split("::")); + return objectType.split("::")[1]; + } + } + }) + .filter((item) => item !== undefined); + const uniqueModules = [...new Set(modules)]; + console.log(uniqueModules); + return uniqueModules; + }; + + const getObjectsOfModule = (packageName: string, moduleName: string) => { + const objectOfModule = objects + .map((obj) => { + if (obj.type !== "published") { + if ( + obj.objectType.startsWith(packageName) && + obj.objectType.split("::")[1] === moduleName + ) { + return obj; + } + } + }) + .filter((item) => item !== undefined); + return objectOfModule; + }; + return ( <>
@@ -278,7 +341,66 @@ export const MoveCall = ({ state, dispatch }: IMoveCallProps) => {
} - {status === MoveCallStatus.FINISH &&

Result: ${response}

} + {status === MoveCallStatus.FINISH && <> +
+ Result +
+ +
+ {uniquePackages.map((pkg) => { + return ( +
+
+
+

+ Package ID: + + {shortenAddress(pkg.packageName, 5)} + +

+
+ {getModulesOfPackage(pkg.packageName).map((module) => { + return ( +
+
Module: {module}
+ {getObjectsOfModule(pkg.packageName, module).map((obj) => { + return ( +
+
Object id:{shortenAddress(obj.objectId, 5)}
+
+ Object type: {shortenObjectType(obj.objectType, 5)} +
+
+ ); + })} +
+ ); + })} +
+
+ ); + })} +
+ + {/* {objects.map((obj) => { + if (obj.type !== "published") { + return ( + <> +
+
Object id: {obj.objectId}
+
Object type: {obj.objectType}
+
+ + ); + } + })} */} + } {status === MoveCallStatus.ERROR && } From 3ccb45ac8c0f0a2e3ad5f0a1aca4ea6016874056 Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 23:39:21 +0700 Subject: [PATCH 12/13] feat: add Feedback --- webview-ui/src/RootLayout.tsx | 2 ++ webview-ui/src/components/Feedback.tsx | 9 +++++++++ webview-ui/src/features/buildTestPublish/index.tsx | 10 ++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 webview-ui/src/components/Feedback.tsx diff --git a/webview-ui/src/RootLayout.tsx b/webview-ui/src/RootLayout.tsx index 900d92e..0595f2c 100644 --- a/webview-ui/src/RootLayout.tsx +++ b/webview-ui/src/RootLayout.tsx @@ -1,12 +1,14 @@ import React from "react"; import { Outlet } from "react-router-dom"; import { Rainbow } from "./components/Rainbow"; +import { Feedback } from "./components/Feedback"; export const RootLayout = () => { return (
+
); }; diff --git a/webview-ui/src/components/Feedback.tsx b/webview-ui/src/components/Feedback.tsx new file mode 100644 index 0000000..b2af1ef --- /dev/null +++ b/webview-ui/src/components/Feedback.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +export const Feedback = () => { + return ( + + Feedback + + ) +} diff --git a/webview-ui/src/features/buildTestPublish/index.tsx b/webview-ui/src/features/buildTestPublish/index.tsx index 537ed14..a832896 100644 --- a/webview-ui/src/features/buildTestPublish/index.tsx +++ b/webview-ui/src/features/buildTestPublish/index.tsx @@ -205,10 +205,12 @@ export const BuildTestPublish = () => { {isError && } {!isError && ( <> -
- Result -
- {currentDigest &&
Transaction: {currentDigest}
} + {currentDigest && <> +
+ Result +
+
Transaction: {currentDigest}
+ }
{uniquePackages.map((pkg) => { From 884653e30f7ac36d99941903b1f4ce2724613b97 Mon Sep 17 00:00:00 2001 From: Le Khac Thanh Tung Date: Wed, 10 Apr 2024 23:50:39 +0700 Subject: [PATCH 13/13] feat: update Logo & package.json --- media/icon.png | Bin 0 -> 133257 bytes package.json | 3 +- webview-ui/src/App.tsx | 6 ++-- webview-ui/src/components/Logo.tsx | 47 +++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 media/icon.png create mode 100644 webview-ui/src/components/Logo.tsx diff --git a/media/icon.png b/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b68bfb31c19518327674eeb72e12eb7e3d67e2f GIT binary patch literal 133257 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

8;F~O&UjmUj5Dgy!w;+;4J+@n?)`6HvNd=l@i3i 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 256ef41..857da53 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,10 @@ { "name": "sui-simulator-vscode", "displayName": "sui-simulator", + "icon": "media/icon.png", "publisher": "weminal-labs", "description": "", - "version": "0.3.0", + "version": "0.4.0", "repository": "https://github.com/Weminal-labs/sui-simulator-vscode", "engines": { "vscode": "^1.87.0" diff --git a/webview-ui/src/App.tsx b/webview-ui/src/App.tsx index 2d3441d..c99bbb7 100644 --- a/webview-ui/src/App.tsx +++ b/webview-ui/src/App.tsx @@ -5,6 +5,7 @@ import { UserIcon } from "./icons/UserIcon"; import { RowVerticalIcon } from "./icons/RowVerticalIcon"; import { ExplorerIcon } from "./icons/ExplorerIcon"; import { Link } from "react-router-dom"; +import { Logo } from "./components/Logo"; export interface IAppProps { } @@ -15,8 +16,9 @@ export const App: React.FunctionComponent = ({ }: React.PropsWithChil
-
- Sui simulator +
+ +
Sui simulator
diff --git a/webview-ui/src/components/Logo.tsx b/webview-ui/src/components/Logo.tsx new file mode 100644 index 0000000..14abc07 --- /dev/null +++ b/webview-ui/src/components/Logo.tsx @@ -0,0 +1,47 @@ +import React from "react"; + +interface Props { + className?: string; +} + +export const Logo = ({ className }: Props) => { + return ( + + + + + + + + + + + + + + + ); +};