From 23180c3f57e904837d6db00ca7effc7cbec93582 Mon Sep 17 00:00:00 2001 From: findolor Date: Wed, 25 Sep 2024 19:16:35 +0300 Subject: [PATCH 1/3] refactor: reset account filter if accounts change in settings --- tauri-app/src/lib/stores/settings.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tauri-app/src/lib/stores/settings.ts b/tauri-app/src/lib/stores/settings.ts index 156916feb..1c7afa37c 100644 --- a/tauri-app/src/lib/stores/settings.ts +++ b/tauri-app/src/lib/stores/settings.ts @@ -150,6 +150,17 @@ 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(currentActiveAccounts).filter(([key]) => key in ($settings.accounts ?? {})), + ); + activeAccountsItems.set(updatedActiveAccounts); + } }); // When active network is updated to undefined, reset active orderbook From 4feb0c6e5bb794f1e1fb627a14ff1f843059e882 Mon Sep 17 00:00:00 2001 From: findolor Date: Tue, 15 Oct 2024 16:41:09 +0300 Subject: [PATCH 2/3] refactor: update logic --- tauri-app/src/lib/stores/settings.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tauri-app/src/lib/stores/settings.ts b/tauri-app/src/lib/stores/settings.ts index 1c7afa37c..32d1b4fd3 100644 --- a/tauri-app/src/lib/stores/settings.ts +++ b/tauri-app/src/lib/stores/settings.ts @@ -157,7 +157,12 @@ settings.subscribe(async () => { } else { const currentActiveAccounts = get(activeAccountsItems); const updatedActiveAccounts = Object.fromEntries( - Object.entries(currentActiveAccounts).filter(([key]) => key in ($settings.accounts ?? {})), + Object.entries($settings.accounts ?? {}).filter(([key, value]) => { + if (key in currentActiveAccounts) { + return currentActiveAccounts[key] === value; + } + return false; + }), ); activeAccountsItems.set(updatedActiveAccounts); } From 434529e0dbe974cd654085921fce85617e890125 Mon Sep 17 00:00:00 2001 From: findolor Date: Tue, 15 Oct 2024 16:41:19 +0300 Subject: [PATCH 3/3] test: add tests --- tauri-app/src/lib/mocks/settings.ts | 2 +- tauri-app/src/lib/stores/settings.test.ts | 42 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 tauri-app/src/lib/stores/settings.test.ts 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, + }); + }); +});