From 6a31d26783762a13285218369edf9d54f5569dc1 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Fri, 11 Oct 2024 12:44:47 +0200 Subject: [PATCH] Update preinstalled example to make buttons actually work --- .../packages/preinstalled/snap.manifest.json | 2 +- .../preinstalled/src/components/dialog.tsx | 14 ++++-- .../preinstalled/src/components/index.ts | 1 + .../preinstalled/src/components/result.tsx | 34 +++++++++++++ .../packages/preinstalled/src/index.tsx | 49 ++++++++++++++++++- 5 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 packages/examples/packages/preinstalled/src/components/result.tsx diff --git a/packages/examples/packages/preinstalled/snap.manifest.json b/packages/examples/packages/preinstalled/snap.manifest.json index 0fce6d755b..977fe4c7b2 100644 --- a/packages/examples/packages/preinstalled/snap.manifest.json +++ b/packages/examples/packages/preinstalled/snap.manifest.json @@ -7,7 +7,7 @@ "url": "https://github.com/MetaMask/snaps.git" }, "source": { - "shasum": "NzLP9BfbhyGMuOG5TgjxLkvOUQUKJI58t+dTOoY+ylE=", + "shasum": "7rntsnBzcTZzFRHWNhO+yXQ8KTK2uR49xsl+DVmyOnQ=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/examples/packages/preinstalled/src/components/dialog.tsx b/packages/examples/packages/preinstalled/src/components/dialog.tsx index 53d14671d8..ec57151f35 100644 --- a/packages/examples/packages/preinstalled/src/components/dialog.tsx +++ b/packages/examples/packages/preinstalled/src/components/dialog.tsx @@ -1,5 +1,7 @@ import type { SnapComponent } from '@metamask/snaps-sdk/jsx'; import { + Field, + Form, Box, Container, Heading, @@ -19,14 +21,20 @@ export const Dialog: SnapComponent = () => ( Custom Dialog - This is a custom dialog. It has a custom Footer and can be resolved to + This is a custom dialog. It has a custom footer and can be resolved to any value. - +
+ + + +
); diff --git a/packages/examples/packages/preinstalled/src/components/index.ts b/packages/examples/packages/preinstalled/src/components/index.ts index 20da8e550a..b3e97d2d8f 100644 --- a/packages/examples/packages/preinstalled/src/components/index.ts +++ b/packages/examples/packages/preinstalled/src/components/index.ts @@ -1 +1,2 @@ export * from './dialog'; +export * from './result'; diff --git a/packages/examples/packages/preinstalled/src/components/result.tsx b/packages/examples/packages/preinstalled/src/components/result.tsx new file mode 100644 index 0000000000..f50113b5ca --- /dev/null +++ b/packages/examples/packages/preinstalled/src/components/result.tsx @@ -0,0 +1,34 @@ +import type { SnapComponent } from '@metamask/snaps-sdk/jsx'; +import { + Copyable, + Box, + Container, + Heading, + Text, + Footer, + Button, +} from '@metamask/snaps-sdk/jsx'; + +export type ResultProps = { + value: string; +}; + +/** + * A result component. + * + * @param props - The props of the component. + * @param props.value - The value to display. + * @returns The result component. + */ +export const Result: SnapComponent = ({ value }) => ( + + + Custom Dialog + The form was submitted with the following value: + + +
+ +
+
+); diff --git a/packages/examples/packages/preinstalled/src/index.tsx b/packages/examples/packages/preinstalled/src/index.tsx index f09727220b..ad7ee359fb 100644 --- a/packages/examples/packages/preinstalled/src/index.tsx +++ b/packages/examples/packages/preinstalled/src/index.tsx @@ -1,7 +1,10 @@ import { MethodNotFoundError } from '@metamask/snaps-sdk'; -import type { OnRpcRequestHandler } from '@metamask/snaps-sdk'; +import type { + OnRpcRequestHandler, + OnUserInputHandler, +} from '@metamask/snaps-sdk'; -import { Dialog } from './components'; +import { Dialog, Result } from './components'; /** * Handle incoming JSON-RPC requests from the dapp, sent through the @@ -31,3 +34,45 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => { throw new MethodNotFoundError({ method: request.method }); } }; + +export const onUserInput: OnUserInputHandler = async ({ + event, + id, + context, +}) => { + if (event.type === 'ButtonClickEvent') { + if (event.name === 'cancel') { + await snap.request({ + method: 'snap_resolveInterface', + params: { + id, + value: null, + }, + }); + } + + if (event.name === 'ok') { + await snap.request({ + method: 'snap_resolveInterface', + params: { + id, + value: String(context?.value), + }, + }); + } + } + + if (event.type === 'FormSubmitEvent') { + if (event.name === 'form') { + const value = String(event.value['custom-input']); + await snap.request({ + method: 'snap_updateInterface', + params: { + id, + ui: , + context: { value }, + }, + }); + } + } +};