diff --git a/packages/react/src/methods/change/useChangeDataset.ts b/packages/react/src/methods/change/useChangeDataset.ts index 55ba4df..e0c806b 100644 --- a/packages/react/src/methods/change/useChangeDataset.ts +++ b/packages/react/src/methods/change/useChangeDataset.ts @@ -1,4 +1,4 @@ -import { useCallback, useMemo } from "react"; +import { useCallback, useMemo, useState, useEffect } from "react"; import type { ConnectedLdoDataset, ConnectedLdoTransactionDataset, @@ -31,10 +31,21 @@ export function createUseChangeDataset( return function useChangeDataset( specificDataset?: IConnectedLdoDataset, ): useChangeDatasetReturn { - const transactionDataset = useMemo(() => { + const [transactionDataset, setTransactionDataset] = useState< + ConnectedLdoTransactionDataset + >(() => { return ( specificDataset ?? dataset ).startTransaction() as ConnectedLdoTransactionDataset; + }); + + // Update transaction dataset when specificDataset changes + useEffect(() => { + setTransactionDataset( + ( + specificDataset ?? dataset + ).startTransaction() as ConnectedLdoTransactionDataset, + ); }, [specificDataset]); const setData = useCallback>( @@ -46,9 +57,18 @@ export function createUseChangeDataset( [transactionDataset], ); - const commitData = useCallback>(() => { - return transactionDataset.commitToRemote(); - }, [transactionDataset]); + const commitData = useCallback>(async () => { + const result = await transactionDataset.commitToRemote(); + if (!result.isError) { + // Replace with a new transaction from the dataset or specificDataset + setTransactionDataset( + ( + specificDataset ?? dataset + ).startTransaction() as ConnectedLdoTransactionDataset, + ); + } + return result; + }, [transactionDataset, specificDataset]); return useMemo( () => [transactionDataset, setData, commitData],