📄 src/web3/vue/handlers/syncCounterHandler.ts
D-OPEN SOVEREIGN
1import { sessionStore } from '../../session/store';
2import type { ChainMutation, MutationHandler } from '../MutationBus';
3
4type SaveMutation = Extract<ChainMutation, { type: 'save' }>;
5
6interface SaveSnapshot {
7 chainId: number;
8 account: string;
9 prevPatchIndex: number;
10}
11
12export const syncCounterHandler: MutationHandler<SaveMutation> = {
13 applyOptimistic: (mutation): SaveSnapshot => {
14 const { lastPatchIndex } = sessionStore.lastSyncCounters(mutation.account, mutation.chainId);
15 const snapshot: SaveSnapshot = { chainId: mutation.chainId, account: mutation.account, prevPatchIndex: lastPatchIndex };
16 sessionStore.setLastSavedPatchIndex(mutation.account, mutation.chainId, mutation.newIndex);
17 return snapshot;
18 },
19
20 rollback: (snapshot: SaveSnapshot | null) => {
21 if (!snapshot) return;
22 sessionStore.setLastSavedPatchIndex(snapshot.account, snapshot.chainId, snapshot.prevPatchIndex);
23 },
24};
25