diff --git a/tauri-app/src/lib/mocks/settings.ts b/tauri-app/src/lib/mocks/settings.ts index d90d7ec41..268865075 100644 --- a/tauri-app/src/lib/mocks/settings.ts +++ b/tauri-app/src/lib/mocks/settings.ts @@ -1,7 +1,7 @@ import type { ConfigSource } from '$lib/typeshare/config'; import { writable } from 'svelte/store'; -const mockConfigSource: ConfigSource = { +export const mockConfigSource: ConfigSource = { networks: { mainnet: { rpc: 'https://mainnet.infura.io/v3/YOUR-PROJECT-ID', diff --git a/tauri-app/src/lib/stores/settings.test.ts b/tauri-app/src/lib/stores/settings.test.ts new file mode 100644 index 000000000..0ae6b5949 --- /dev/null +++ b/tauri-app/src/lib/stores/settings.test.ts @@ -0,0 +1,42 @@ +import { expect, test, beforeEach, describe } from 'vitest'; +import { settings, activeAccountsItems } from './settings'; +import { mockConfigSource } from '$lib/mocks/settings'; +import { get } from 'svelte/store'; + +describe('Settings active accounts items', async () => { + beforeEach(() => { + activeAccountsItems.set(mockConfigSource.accounts as Record); + expect(get(activeAccountsItems)).toEqual(mockConfigSource.accounts); + }); + + test('should remove account if that account is removed', () => { + const newSettings = { + ...mockConfigSource, + accounts: { + name_one: mockConfigSource.accounts?.name_one as string, + }, + }; + + settings.set(newSettings); + + expect(get(activeAccountsItems)).toEqual({ + name_one: mockConfigSource.accounts?.name_one as string, + }); + }); + + test('should remove account if the value is different', () => { + const newSettings = { + ...mockConfigSource, + accounts: { + name_one: mockConfigSource.accounts?.name_one as string, + name_two: 'new_value', + }, + }; + + settings.set(newSettings); + + expect(get(activeAccountsItems)).toEqual({ + name_one: mockConfigSource.accounts?.name_one as string, + }); + }); +}); diff --git a/tauri-app/src/lib/stores/settings.ts b/tauri-app/src/lib/stores/settings.ts index 156916feb..32d1b4fd3 100644 --- a/tauri-app/src/lib/stores/settings.ts +++ b/tauri-app/src/lib/stores/settings.ts @@ -150,6 +150,22 @@ settings.subscribe(async () => { ) { resetActiveOrderbookRef(); } + + // Reset active account items if accounts have changed + if ($settings?.accounts === undefined) { + activeAccountsItems.set({}); + } else { + const currentActiveAccounts = get(activeAccountsItems); + const updatedActiveAccounts = Object.fromEntries( + Object.entries($settings.accounts ?? {}).filter(([key, value]) => { + if (key in currentActiveAccounts) { + return currentActiveAccounts[key] === value; + } + return false; + }), + ); + activeAccountsItems.set(updatedActiveAccounts); + } }); // When active network is updated to undefined, reset active orderbook