Skip to content

Commit eb0514a

Browse files
committed
feat: keep language in sync between v1 and LMP bundle [LW-13999]
1 parent 9a915eb commit eb0514a

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

v1/apps/browser-extension-wallet/src/lib/scripts/background/services/lmpService.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
/* eslint-disable @typescript-eslint/no-var-requires */
22
import { BundleAppApi, LmpBundleWallet, v1ApiGlobalProperty } from '@src/utils/lmp';
3-
import { firstValueFrom, map } from 'rxjs';
3+
import { BehaviorSubject, firstValueFrom, map } from 'rxjs';
44
import { bitcoinWalletManager, walletManager, walletRepository } from '../wallet';
55
import { AnyBip32Wallet, AnyWallet, InMemoryWallet, WalletType } from '@cardano-sdk/web-extension';
66
import { logger } from '@lace/common';
77
import { Wallet } from '@lace/cardano';
8-
import { setBackgroundStorage } from '../storage';
8+
import { getBackgroundStorage, setBackgroundStorage } from '../storage';
99
import { Bitcoin } from '@lace/bitcoin';
10+
import { Language } from '@lace/translation';
11+
import { requestMessage$ } from './utilityServices';
12+
import { MessageTypes } from '../../types';
1013

1114
const cardanoLogo = require('../../../../assets/icons/browser-view/cardano-logo.svg').default;
1215
const bitcoinLogo = require('../../../../assets/icons/browser-view/bitcoin-logo.svg').default;
@@ -22,6 +25,28 @@ const isInMemoryWallet = (
2225
wallet: AnyWallet<Wallet.WalletMetadata, Wallet.AccountMetadata>
2326
): wallet is InMemoryWallet<Wallet.WalletMetadata, Wallet.AccountMetadata> => wallet.type === WalletType.InMemory;
2427

28+
// BehaviorSubject for language state, initialized with default 'en'
29+
export const language$ = new BehaviorSubject<Language>(Language.en);
30+
31+
// Initialize language from storage on startup
32+
(async () => {
33+
try {
34+
const storage = await getBackgroundStorage();
35+
if (storage.languageChoice) {
36+
language$.next(storage.languageChoice);
37+
}
38+
} catch (error) {
39+
logger.error('Failed to initialize language from storage:', error);
40+
}
41+
})();
42+
43+
// Subscribe to v1 UI language changes via requestMessage$
44+
requestMessage$.subscribe(({ type, data }) => {
45+
if (type === MessageTypes.CHANGE_LANGUAGE) {
46+
language$.next(data as Language);
47+
}
48+
});
49+
2550
const api: BundleAppApi = {
2651
wallets$: walletRepository.wallets$.pipe(
2752
map((wallets) =>
@@ -81,6 +106,12 @@ const api: BundleAppApi = {
81106
});
82107
}
83108
}
109+
},
110+
language$,
111+
setLanguage: async (language: Language): Promise<void> => {
112+
language$.next(language);
113+
await setBackgroundStorage({ languageChoice: language });
114+
requestMessage$.next({ type: MessageTypes.CHANGE_LANGUAGE, data: language });
84115
}
85116
};
86117

v1/apps/browser-extension-wallet/src/utils/lmp.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { RemoteApiProperties, RemoteApiPropertyType } from '@cardano-sdk/web-extension';
33
import { Observable } from 'rxjs';
44
import { storage } from 'webextension-polyfill';
5+
import { Language } from '@lace/translation';
56

67
export type LmpBundleWallet = {
78
walletId: string;
@@ -13,10 +14,14 @@ export type LmpBundleWallet = {
1314
export type BundleAppApi = {
1415
wallets$: Observable<LmpBundleWallet[]>;
1516
activate(walletId: string): Promise<void>;
17+
language$: Observable<Language>;
18+
setLanguage(language: Language): Promise<void>;
1619
};
1720
export const bundleAppApiProps: RemoteApiProperties<BundleAppApi> = {
1821
wallets$: RemoteApiPropertyType.HotObservable,
19-
activate: RemoteApiPropertyType.MethodReturningPromise
22+
activate: RemoteApiPropertyType.MethodReturningPromise,
23+
language$: RemoteApiPropertyType.HotObservable,
24+
setLanguage: RemoteApiPropertyType.MethodReturningPromise
2025
};
2126
export const lmpApiBaseChannel = 'bundle-lmp';
2227
export const v1ApiGlobalProperty = 'bundleV1';

v2

Submodule v2 updated from 03af658 to a56ea50

0 commit comments

Comments
 (0)