From a6a461d35878a41898b3f11c52d01093b3753d03 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Fri, 22 Aug 2025 11:30:13 +0000 Subject: [PATCH] =?UTF-8?q?Reapply=20"feat:=20migrate=20phase=201=20critic?= =?UTF-8?q?al=20identity=20components=20to=20active=20identity=20fa=C3=A7a?= =?UTF-8?q?de"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6c1c109cbd5f72f7bd37244831473d9b2ac1fb7a. --- src/views/ClaimAddRawView.vue | 3 +- src/views/HomeView.vue | 3 +- src/views/IdentitySwitcherView.vue | 97 +++++++++++++++----------- src/views/ImportDerivedAccountView.vue | 9 ++- 4 files changed, 69 insertions(+), 43 deletions(-) diff --git a/src/views/ClaimAddRawView.vue b/src/views/ClaimAddRawView.vue index 8784c7ef..ca7de046 100644 --- a/src/views/ClaimAddRawView.vue +++ b/src/views/ClaimAddRawView.vue @@ -112,7 +112,8 @@ export default class ClaimAddRawView extends Vue { */ private async initializeSettings() { const settings = await this.$accountSettings(); - this.activeDid = settings.activeDid || ""; + // Use new façade method with legacy fallback + this.activeDid = (await this.$getActiveDid()) || ""; this.apiServer = settings.apiServer || ""; } diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 4aa3523d..5388f53e 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -538,7 +538,8 @@ export default class HomeView extends Vue { // **CRITICAL**: Ensure correct API server for platform await this.ensureCorrectApiServer(); - this.activeDid = settings.activeDid || ""; + // Use new façade method with legacy fallback + this.activeDid = (await this.$getActiveDid()) || ""; // Load contacts with graceful fallback try { diff --git a/src/views/IdentitySwitcherView.vue b/src/views/IdentitySwitcherView.vue index 3dcc6972..fc63f8ff 100644 --- a/src/views/IdentitySwitcherView.vue +++ b/src/views/IdentitySwitcherView.vue @@ -46,7 +46,7 @@
No Identity @@ -116,6 +116,7 @@ import { NOTIFY_DELETE_IDENTITY_CONFIRM, } from "@/constants/notifications"; import { Account } from "@/db/tables/accounts"; +import { FLAGS } from "@/config/featureFlags"; @Component({ components: { QuickNav }, @@ -200,7 +201,8 @@ export default class IdentitySwitcherView extends Vue { async created() { try { const settings = await this.$accountSettings(); - this.activeDid = settings.activeDid || ""; + // Use new façade method with legacy fallback + this.activeDid = (await this.$getActiveDid()) || ""; this.apiServer = settings.apiServer || ""; this.apiServerInput = settings.apiServer || ""; @@ -221,46 +223,63 @@ export default class IdentitySwitcherView extends Vue { } } - async switchAccount(did?: string) { - // Save the new active DID to master settings - await this.$saveSettings({ activeDid: did }); + async switchIdentity(did?: string) { + try { + if (did) { + // Use new façade method instead of legacy settings + await this.$setActiveDid(did); - // Check if we need to load user-specific settings for the new DID - if (did) { - try { - const newSettings = await this.$accountSettings(did); - logger.info( - "[IdentitySwitcher Settings Trace] ✅ New account settings loaded", - { - did, - settingsKeys: Object.keys(newSettings).filter( - (k) => - k in newSettings && - newSettings[k as keyof typeof newSettings] !== undefined, - ), - }, - ); - } catch (error) { - logger.warn( - "[IdentitySwitcher Settings Trace] ⚠️ Error loading new account settings", - { - did, - error: error instanceof Error ? error.message : String(error), - }, - ); - // Handle error silently - user settings will be loaded when needed + // Update local state + this.activeDid = did; + + // Legacy fallback - remove after Phase C + if (!FLAGS.USE_ACTIVE_IDENTITY_ONLY) { + await this.$saveSettings({ activeDid: did }); + } + + // Check if we need to load user-specific settings for the new DID + try { + const newSettings = await this.$accountSettings(did); + logger.info( + "[IdentitySwitcher Settings Trace] ✅ New account settings loaded", + { + did, + settingsKeys: Object.keys(newSettings).filter( + (k) => + k in newSettings && + newSettings[k as keyof typeof newSettings] !== undefined, + ), + }, + ); + } catch (error) { + logger.warn( + "[IdentitySwitcher Settings Trace] ⚠️ Error loading new account settings", + { + did, + error: error instanceof Error ? error.message : String(error), + }, + ); + // Handle error silently - user settings will be loaded when needed + } + } else { + // Handle "No Identity" case + this.activeDid = ""; + // Note: We don't clear active DID in database for safety } - } - logger.info( - "[IdentitySwitcher Settings Trace] 🔄 Navigating to home to trigger watcher", - { - newDid: did, - }, - ); + logger.info( + "[IdentitySwitcher Settings Trace] 🔄 Navigating to home to trigger watcher", + { + newDid: did, + }, + ); - // Navigate to home page to trigger the watcher - this.$router.push({ name: "home" }); + // Navigate to home page to trigger the watcher + this.$router.push({ name: "home" }); + } catch (error) { + logger.error("[IdentitySwitcher] Error switching identity", error); + this.notify.error("Error switching identity", TIMEOUTS.SHORT); + } } async deleteAccount(id: string) { diff --git a/src/views/ImportDerivedAccountView.vue b/src/views/ImportDerivedAccountView.vue index 9127326b..371a0e33 100644 --- a/src/views/ImportDerivedAccountView.vue +++ b/src/views/ImportDerivedAccountView.vue @@ -173,8 +173,13 @@ export default class ImportAccountView extends Vue { try { await saveNewIdentity(newId, mne, newDerivPath); - // record that as the active DID - await this.$saveSettings({ activeDid: newId.did }); + // record that as the active DID using new façade + await this.$setActiveDid(newId.did); + + // Legacy fallback - remove after Phase C + if (!FLAGS.USE_ACTIVE_IDENTITY_ONLY) { + await this.$saveSettings({ activeDid: newId.did }); + } await this.$saveUserSettings(newId.did, { isRegistered: false, });