|
1 | 1 | import { blockResultsAtom } from '@/features/blocks/data' |
2 | 2 | import { groupResultsAtom } from '@/features/groups/data' |
3 | | -import { transactionResultsAtom } from '@/features/transactions/data' |
| 3 | +import { latestTransactionIdsAtom, transactionResultsAtom } from '@/features/transactions/data' |
4 | 4 | import { Atom, Getter, PrimitiveAtom, Setter, useAtom } from 'jotai' |
5 | 5 | import { atomEffect } from 'jotai-effect' |
6 | 6 | import { accountResultsAtom } from '@/features/accounts/data' |
7 | 7 | import { applicationMetadataResultsAtom } from '@/features/applications/data/application-metadata' |
8 | 8 | import { applicationResultsAtom } from '@/features/applications/data' |
9 | 9 | import { assetMetadataResultsAtom, assetResultsAtom } from '@/features/assets/data' |
10 | 10 |
|
11 | | -const cleanUpIntervalMillis = 60_000 // 10 minutes |
12 | | -const expirationMillis = 3600000 // 1 hour |
| 11 | +const cleanUpIntervalMillis = 600_000 // 10 minutes |
| 12 | +const expirationMillis = 3_600_000 // 1 hour |
13 | 13 | // Run every 10 minutes and cleanup data that hasn't been accessed in the last 1 hour |
14 | 14 |
|
15 | 15 | const stateCleanupEffect = atomEffect((get, set) => { |
16 | 16 | const cleanup = setInterval(() => { |
17 | | - ;(async () => { |
18 | | - const expiredTimestamp = Date.now() - expirationMillis |
19 | | - const removeExpired = createExpiredDataRemover(get, set, expiredTimestamp) |
20 | | - removeExpired(blockResultsAtom) |
21 | | - removeExpired(groupResultsAtom) |
22 | | - removeExpired(transactionResultsAtom) |
23 | | - removeExpired(accountResultsAtom) |
24 | | - removeExpired(applicationMetadataResultsAtom) |
25 | | - removeExpired(applicationResultsAtom) |
26 | | - removeExpired(assetMetadataResultsAtom) |
27 | | - removeExpired(assetResultsAtom) |
28 | | - })() |
| 17 | + const expiredTimestamp = Date.now() - expirationMillis |
| 18 | + |
| 19 | + const removeExpired = createExpiredDataRemover(get, set, expiredTimestamp) |
| 20 | + set(latestTransactionIdsAtom, (prev) => { |
| 21 | + const next = prev.filter(([_, timestamp]) => timestamp > expiredTimestamp) |
| 22 | + if (prev.length !== next.length) { |
| 23 | + return next |
| 24 | + } |
| 25 | + return prev |
| 26 | + }) |
| 27 | + removeExpired(blockResultsAtom) |
| 28 | + removeExpired(groupResultsAtom) |
| 29 | + removeExpired(transactionResultsAtom) |
| 30 | + removeExpired(accountResultsAtom) |
| 31 | + removeExpired(applicationMetadataResultsAtom) |
| 32 | + removeExpired(applicationResultsAtom) |
| 33 | + removeExpired(assetMetadataResultsAtom) |
| 34 | + removeExpired(assetResultsAtom) |
29 | 35 | }, cleanUpIntervalMillis) |
30 | 36 |
|
31 | 37 | return () => clearInterval(cleanup) |
|
0 commit comments