📄 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