@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
1 lines • 4.6 kB
Source Map (JSON)
{"version":3,"sources":["../../src/hooks/useTransact.tsx"],"names":[],"mappings":";;;AAyEA,IAAM,cAAc,CAAC;AAAA,EACnB,aAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,GAAwB,EAA6B,KAAA;AACnD,EAAA,MAAM,SAAS,YAAa,EAAA;AAC5B,EAAA,MAAM,EAAE,MAAA,EAAQ,cAAe,EAAA,GAAI,4BAA6B,EAAA;AAEhE,EAAM,MAAA,QAAA,GAAW,CAAC,EAAoB,KAAA;AACpC,IAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,MAAc,aAAA,EAAA;AAAA;AAGhB,IAAA,cAAA;AAAA,MACE;AAAA,QACE,WAAa,EAAA;AAAA,OACf;AAAA,MACA;AAAA,QACE,OAAA,EAAS,CAAC,CAAa,KAAA;AACrB,UAAA,IAAI,WAAW,IAAM,EAAA;AACnB,YAAA,OAAA,CAAQ,CAAC,CAAA;AAAA;AACX,SACF;AAAA,QACA,SAAA,EAAW,CAAC,IAA6C,KAAA;AACvD,UAAA,MAAA,CACG,kBAAmB,CAAA;AAAA,YAClB,QAAQ,IAAK,CAAA,MAAA;AAAA,YACb,OAAS,EAAA;AAAA,WACV,CAAA,CACA,IAAK,CAAA,CAAC,QAA0C,KAAA;AAC/C,YAAA,IAAI,aAAa,IAAM,EAAA;AACrB,cAAA,SAAA,CAAU,MAAM,QAAQ,CAAA;AAAA;AAC1B,WACD,CAAA,CACA,KAAM,CAAA,CAAC,CAAM,KAAA;AACZ,YAAA,IAAI,WAAW,IAAM,EAAA;AACnB,cAAA,OAAA,CAAQ,CAAC,CAAA;AAAA;AACX,WACD,CAAA;AAAA;AACL;AACF,KACF;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,QAAS,EAAA;AACpB,CAAA;AAEA,IAAO,mBAAQ,GAAA","file":"useTransact.mjs","sourcesContent":["import { useSignAndExecuteTransaction, useSuiClient } from '@mysten/dapp-kit'\nimport {\n SuiTransactionBlockResponse,\n SuiTransactionBlockResponseOptions,\n} from '@mysten/sui/client'\nimport { Transaction } from '@mysten/sui/transactions'\nimport type { SuiSignAndExecuteTransactionOutput } from '@mysten/wallet-standard'\n\nexport interface IUseTransactParams {\n /**\n * (Optional) Is executed when user triggers a transaction.\n */\n onBeforeStart?: () => void\n /**\n * (Optional) React on success, e.g. refetch dependent queries.\n *\n * @param {SuiSignAndExecuteTransactionOutput} data The transaction output.\n * @param {SuiTransactionBlockResponse} waitForTransactionResponse The transaction response.\n */\n onSuccess?: (\n data: SuiSignAndExecuteTransactionOutput,\n waitForTransactionResponse: SuiTransactionBlockResponse\n ) => void\n /**\n * (Optional) React on error.\n *\n * @param {Error} e The error.\n */\n onError?: (e: Error) => void\n\n /**\n * (Optional) Options for waitForTransaction call.\n */\n waitForTransactionOptions?: SuiTransactionBlockResponseOptions\n}\n\nexport interface IUseTransactResponse {\n /**\n * Perform a transaction on the Sui network.\n *\n * @param {Transaction} tx The transaction to perform.\n */\n transact: (tx: Transaction) => void\n}\n\n/**\n * The useTransact() hook lets you perform a transaction on the Sui network.\n *\n * Usage:\n * ```ts\n * import type { SuiSignAndExecuteTransactionOutput } from '@mysten/wallet-standard'\n * import { Transaction } from '@mysten/sui/transactions'\n * const { transact: greet } = useTransact({\n * onBeforeStart: () => {},\n * onSuccess: (data: SuiSignAndExecuteTransactionOutput, waitForTransactionResponse: SuiTransactionBlockResponse) => {},\n * onError: (e: Error) => {}\n * })\n *\n * const prepareTransaction = (packageId: string, objectId: string, name: string) => {\n * const tx = new Transaction()\n * tx.moveCall({\n * arguments: [tx.object(objectId), tx.pure.string(name), tx.object('0x8')],\n * target: `${packageId}::greeting::set_greeting`,\n * })\n * return tx\n * }\n *\n * greet(prepareTransaction(packageId, objectId, name))\n * ```\n *\n * @param {IUseTransactParams} The hook params.\n * @returns {IUseTransactResponse} An object with the transact function.\n */\nconst useTransact = ({\n onBeforeStart,\n onSuccess,\n onError,\n waitForTransactionOptions,\n}: IUseTransactParams = {}): IUseTransactResponse => {\n const client = useSuiClient()\n const { mutate: signAndExecute } = useSignAndExecuteTransaction()\n\n const transact = (tx: Transaction) => {\n if (onBeforeStart != null) {\n onBeforeStart()\n }\n\n signAndExecute(\n {\n transaction: tx,\n },\n {\n onError: (e: Error) => {\n if (onError != null) {\n onError(e)\n }\n },\n onSuccess: (data: SuiSignAndExecuteTransactionOutput) => {\n client\n .waitForTransaction({\n digest: data.digest,\n options: waitForTransactionOptions,\n })\n .then((response: SuiTransactionBlockResponse) => {\n if (onSuccess != null) {\n onSuccess(data, response)\n }\n })\n .catch((e) => {\n if (onError != null) {\n onError(e)\n }\n })\n },\n }\n )\n }\n\n return { transact }\n}\n\nexport default useTransact\n"]}