UNPKG

@suiware/kit

Version:

Opinionated React components and hooks for building Sui dApps.

1 lines 4.65 kB
{"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,EAAC,KAA4B;AACnD,EAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,EAAA,MAAM,EAAE,MAAA,EAAQ,cAAA,EAAe,GAAI,4BAAA,EAA6B;AAEhE,EAAA,MAAM,QAAA,GAAW,CAAC,EAAA,KAAoB;AACpC,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,MAAA,aAAA,EAAc;AAAA,IAChB;AAEA,IAAA,cAAA;AAAA,MACE;AAAA,QACE,WAAA,EAAa;AAAA,OACf;AAAA,MACA;AAAA,QACE,OAAA,EAAS,CAAC,CAAA,KAAa;AACrB,UAAA,IAAI,WAAW,IAAA,EAAM;AACnB,YAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,UACX;AAAA,QACF,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,IAAA,KAA6C;AACvD,UAAA,MAAA,CACG,kBAAA,CAAmB;AAAA,YAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,OAAA,EAAS;AAAA,WACV,CAAA,CACA,IAAA,CAAK,CAAC,QAAA,KAA0C;AAC/C,YAAA,IAAI,aAAa,IAAA,EAAM;AACrB,cAAA,SAAA,CAAU,MAAM,QAAQ,CAAA;AAAA,YAC1B;AAAA,UACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,CAAA,KAAM;AACZ,YAAA,IAAI,WAAW,IAAA,EAAM;AACnB,cAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,YACX;AAAA,UACF,CAAC,CAAA;AAAA,QACL;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,EAAE,QAAA,EAAS;AACpB,CAAA;AAEA,IAAO,mBAAA,GAAQ","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"]}