Skip to content

Commit 2eb3996

Browse files
authored
feat: integrate new ui package, add placeholder for the OTPCodeModal … (#1336)
* feat: integrate new ui package, add placeholder for the OTPCodeModal and deprecate non uses ones * fix: add clarification comments * fix: logger typo * fix: correct logger calls
1 parent f43be4a commit 2eb3996

File tree

21 files changed

+141
-462
lines changed

21 files changed

+141
-462
lines changed

packages/sdk-multichain/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"@metamask/multichain-api-client": "^0.6.4",
5252
"@metamask/onboarding": "^1.0.1",
5353
"@metamask/sdk-analytics": "workspace:^",
54-
"@metamask/sdk-install-modal-web": "workspace:^",
54+
"@metamask/sdk-multichain-ui": "workspace:^",
5555
"@metamask/utils": "^11.4.0",
5656
"@paulmillr/qr": "^0.2.1",
5757
"bowser": "^2.11.0",

packages/sdk-multichain/src/domain/ui/factory.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { CaipAccountId } from '@metamask/utils';
33
import type { MultichainOptions, Scope, SessionData } from '../multichain';
44
import type { Modal } from './types';
55

6-
export type ModalTypes = 'installModal' | 'selectModal' | 'pendingModal';
6+
export type ModalTypes = 'installModal' | 'otpCodeModal';
77
/**
88
* Record type that maps modal names to their corresponding Modal instances.
99
* Used to store different types of modals that can be created by the factory.
@@ -43,8 +43,7 @@ export type ModalFactoryOptions = Pick<MultichainOptions, 'mobile' | 'transport'
4343
*/
4444
export abstract class ModalFactory<T extends FactoryModals = FactoryModals> {
4545
abstract renderInstallModal(link: string, preferDesktop: boolean): Promise<void>;
46-
abstract renderSelectModal(link: string, preferDesktop: boolean, connect: () => Promise<void>): Promise<void>;
47-
abstract renderPendingModal(): Promise<void>;
46+
abstract renderOTPCodeModal(): Promise<void>;
4847
/**
4948
* Creates a new modal factory instance.
5049
* @param options - The modals configuration object
@@ -54,7 +53,7 @@ export abstract class ModalFactory<T extends FactoryModals = FactoryModals> {
5453
}
5554

5655
private validateModals() {
57-
const requiredModals = ['installModal', 'selectModal', 'pendingModal'];
56+
const requiredModals = ['installModal', 'otpCodeModal'];
5857
const missingModals = requiredModals.filter((modal) => !this.options[modal as ModalTypes]);
5958
if (missingModals.length > 0) {
6059
throw new Error(`Missing required modals: ${missingModals.join(', ')}`);
Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Components } from '@metamask/sdk-install-modal-web';
1+
import type { Components } from '@metamask/sdk-multichain-ui';
22

33
export interface InstallWidgetProps extends Components.MmInstallModal {
44
parentElement?: Element;
@@ -8,19 +8,14 @@ export interface InstallWidgetProps extends Components.MmInstallModal {
88
};
99
}
1010

11-
export interface PendingWidgetProps extends Components.MmPendingModal {
11+
//TODO: Extend from the right component once modal is implemented
12+
export interface OTPCodeWidgetProps extends Components.MmInstallModal {
1213
parentElement?: Element;
1314
onClose: () => void;
1415
onDisconnect?: () => void;
1516
updateOTPValue: (otpValue: string) => void;
1617
}
1718

18-
export interface SelectWidgetProps extends Components.MmSelectModal {
19-
parentElement?: Element;
20-
onClose: (shouldTerminate?: boolean) => void;
21-
connect: () => void;
22-
}
23-
2419
export type RenderedModal = {
2520
mount(qrcodeLink?: string): void;
2621
unmount(shouldTerminate?: boolean): void;
@@ -33,21 +28,16 @@ export type RenderedModal = {
3328

3429
// biome-ignore lint/suspicious/noExplicitAny: Expected here
3530
export abstract class Modal<T extends Record<string, any>> {
36-
abstract instance?: HTMLMmInstallModalElement | HTMLMmSelectModalElement | HTMLMmPendingModalElement;
31+
abstract instance?: HTMLMmInstallModalElement | undefined;
3732
abstract render(options: T): Promise<RenderedModal>;
3833

3934
updateQRCode(link: string) {
4035
const installModal = this.instance?.querySelector('mm-install-modal') as HTMLMmInstallModalElement | null;
4136
if (installModal) {
4237
installModal.link = link;
43-
} else {
44-
const selectModal = this.instance?.querySelector('mm-select-modal') as HTMLMmSelectModalElement | null;
45-
if (selectModal) {
46-
selectModal.link = link;
47-
}
4838
}
4939
}
5040
}
5141

52-
export abstract class AbstractInstallModal extends Modal<InstallWidgetProps | SelectWidgetProps> {}
53-
export abstract class AbstractPendingModal extends Modal<PendingWidgetProps> {}
42+
export abstract class AbstractInstallModal extends Modal<InstallWidgetProps> {}
43+
export abstract class AbstractOTPCodeModal extends Modal<OTPCodeWidgetProps> {}

0 commit comments

Comments
 (0)