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