{"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"]}