Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: reset cursor when opening transaction history views #2060

Merged
merged 9 commits into from
Mar 27, 2024
3 changes: 2 additions & 1 deletion packages/core/src/controllers/AccountController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ export const AccountController = {

resetAccount() {
state.isConnected = false
state.currentTab = 0
state.caipAddress = undefined
state.address = undefined
state.balance = undefined
Expand All @@ -107,6 +108,6 @@ export const AccountController = {
state.profileImage = undefined
state.addressExplorerUrl = undefined
state.smartAccountDeployed = undefined
state.currentTab = 0
state.tokenBalance = []
}
}
5 changes: 5 additions & 0 deletions packages/core/src/controllers/TransactionsController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export const TransactionsController = {
SnackController.showError('Failed to fetch transactions')
state.loading = false
state.empty = true
state.next = undefined
}
},

Expand Down Expand Up @@ -125,6 +126,10 @@ export const TransactionsController = {
})
},

clearCursor() {
state.next = undefined
},

resetTransactions() {
state.transactions = []
state.transactionsByYear = {}
Expand Down
16 changes: 14 additions & 2 deletions packages/core/tests/controllers/AccountController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const profileImage = 'https://ipfs.com/0x123.png'
// -- Tests --------------------------------------------------------------------
describe('AccountController', () => {
it('should have valid default state', () => {
expect(AccountController.state).toEqual({ isConnected: false })
expect(AccountController.state).toEqual({ isConnected: false, tokenBalance: [], currentTab: 0 })
})

it('should update state correctly on setIsConnected()', () => {
Expand Down Expand Up @@ -43,6 +43,18 @@ describe('AccountController', () => {

it('should update state correctly on resetAccount()', () => {
AccountController.resetAccount()
expect(AccountController.state).toEqual({ isConnected: false })
expect(AccountController.state).toEqual({
isConnected: false,
currentTab: 0,
caipAddress: undefined,
address: undefined,
balance: undefined,
balanceSymbol: undefined,
profileName: undefined,
profileImage: undefined,
addressExplorerUrl: undefined,
smartAccountDeployed: undefined,
tokenBalance: []
})
})
})
9 changes: 7 additions & 2 deletions packages/core/tests/controllers/ConnectorController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ const metamaskConnector = {
type: 'INJECTED',
info: { rdns: 'io.metamask.com' }
} as const

const zerionConnector = {
id: 'ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18',
type: 'INJECTED'
} as const
// -- Tests --------------------------------------------------------------------
describe('ConnectorController', () => {
it('should have valid default state', () => {
Expand Down Expand Up @@ -37,8 +40,10 @@ describe('ConnectorController', () => {
})

it('should return the correct connector on getConnector', () => {
expect(ConnectorController.getConnector('walletConnect', '')).toBe(walletConnectConnector)
ConnectorController.addConnector(zerionConnector)
expect(ConnectorController.getConnector('walletConnect', '')).toBe(undefined)
expect(ConnectorController.getConnector('', 'io.metamask.com')).toBe(metamaskConnector)
expect(ConnectorController.getConnector(zerionConnector.id, '')).toBeUndefined()
expect(ConnectorController.getConnector('unknown', '')).toBeUndefined()
})
})
27 changes: 27 additions & 0 deletions packages/core/tests/controllers/TransactionsController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,4 +238,31 @@ describe('TransactionsController', () => {
}
})
})

it('should clear cursor correctly', async () => {
// Mock fetch transactions
const fetchTransactions = vi
.spyOn(BlockchainApiController, 'fetchTransactions')
.mockResolvedValue({
data: [],
next: 'cursor'
})

// Fetch transactions
await TransactionsController.fetchTransactions('0x123')
expect(TransactionsController.state.next).toBe('cursor')

TransactionsController.clearCursor()
expect(TransactionsController.state.next).toBeUndefined()

// Fetch transactions again
await TransactionsController.fetchTransactions('0x123')
expect(fetchTransactions).toHaveBeenCalledWith({
account: '0x123',
projectId,
cursor: undefined,
onramp: undefined
})
expect(TransactionsController.state.next).toBe('cursor')
})
})
1 change: 1 addition & 0 deletions packages/scaffold/src/partials/w3m-activity-list/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export class W3mActivityList extends LitElement {
// -- Lifecycle ----------------------------------------- //
public constructor() {
super()
TransactionsController.clearCursor()
this.unsubscribe.push(
...[
AccountController.subscribe(val => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export class W3mOnRampActivityView extends LitElement {
})
]
)
TransactionsController.clearCursor()
this.fetchTransactions()
}

Expand Down
Loading