@tanstack/offline-transactions
Version:
Offline-first transaction capabilities for TanStack DB
43 lines (42 loc) • 1.3 kB
JavaScript
import { OnMutateMustBeSynchronousError } from "@tanstack/db";
import { OfflineTransaction } from "./OfflineTransaction.js";
function isPromiseLike(value) {
return !!value && (typeof value === `object` || typeof value === `function`) && typeof value.then === `function`;
}
function createOfflineAction(options, mutationFn, persistTransaction, executor) {
const { mutationFnName, onMutate } = options;
console.log(`createOfflineAction 2`, options);
return (variables) => {
const offlineTransaction = new OfflineTransaction(
{
mutationFnName,
autoCommit: false
},
mutationFn,
persistTransaction,
executor
);
const transaction = offlineTransaction.mutate(() => {
console.log(`mutate`);
const maybePromise = onMutate(variables);
if (isPromiseLike(maybePromise)) {
throw new OnMutateMustBeSynchronousError();
}
});
const commitPromise = (async () => {
try {
await transaction.commit();
console.log(`offlineAction committed - success`);
} catch {
console.log(`offlineAction commit failed - error`);
}
})();
commitPromise.catch(() => {
});
return transaction;
};
}
export {
createOfflineAction
};
//# sourceMappingURL=OfflineAction.js.map