resets the transaction after commit

main
Jackson Morgan 3 weeks ago
parent 3ea19003ca
commit 0c70afff3b
  1. 30
      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 { import type {
ConnectedLdoDataset, ConnectedLdoDataset,
ConnectedLdoTransactionDataset, ConnectedLdoTransactionDataset,
@ -31,10 +31,21 @@ export function createUseChangeDataset<Plugins extends ConnectedPlugin[]>(
return function useChangeDataset( return function useChangeDataset(
specificDataset?: IConnectedLdoDataset<Plugins>, specificDataset?: IConnectedLdoDataset<Plugins>,
): useChangeDatasetReturn<Plugins> { ): useChangeDatasetReturn<Plugins> {
const transactionDataset = useMemo(() => { const [transactionDataset, setTransactionDataset] = useState<
ConnectedLdoTransactionDataset<Plugins>
>(() => {
return ( return (
specificDataset ?? dataset specificDataset ?? dataset
).startTransaction() as ConnectedLdoTransactionDataset<Plugins>; ).startTransaction() as ConnectedLdoTransactionDataset<Plugins>;
});
// Update transaction dataset when specificDataset changes
useEffect(() => {
setTransactionDataset(
(
specificDataset ?? dataset
).startTransaction() as ConnectedLdoTransactionDataset<Plugins>,
);
}, [specificDataset]); }, [specificDataset]);
const setData = useCallback<useChangeSetDataset<Plugins>>( const setData = useCallback<useChangeSetDataset<Plugins>>(
@ -46,9 +57,18 @@ export function createUseChangeDataset<Plugins extends ConnectedPlugin[]>(
[transactionDataset], [transactionDataset],
); );
const commitData = useCallback<useChangeCommitData<Plugins>>(() => { const commitData = useCallback<useChangeCommitData<Plugins>>(async () => {
return transactionDataset.commitToRemote(); const result = await transactionDataset.commitToRemote();
}, [transactionDataset]); if (!result.isError) {
// Replace with a new transaction from the dataset or specificDataset
setTransactionDataset(
(
specificDataset ?? dataset
).startTransaction() as ConnectedLdoTransactionDataset<Plugins>,
);
}
return result;
}, [transactionDataset, specificDataset]);
return useMemo( return useMemo(
() => [transactionDataset, setData, commitData], () => [transactionDataset, setData, commitData],

Loading…
Cancel
Save