diff --git a/packages/connect-ui/src/components.d.ts b/packages/connect-ui/src/components.d.ts index e8177053..6c21197e 100644 --- a/packages/connect-ui/src/components.d.ts +++ b/packages/connect-ui/src/components.d.ts @@ -11,6 +11,7 @@ export namespace Components { "callback": Function; "defaultProviders": WebBTCProvider[]; "installedProviders": WebBTCProvider[]; + "persistSelection": boolean; } } declare global { @@ -29,6 +30,7 @@ declare namespace LocalJSX { "callback"?: Function; "defaultProviders"?: WebBTCProvider[]; "installedProviders"?: WebBTCProvider[]; + "persistSelection"?: boolean; } interface IntrinsicElements { "connect-modal": ConnectModal; diff --git a/packages/connect-ui/src/components/modal/modal.tsx b/packages/connect-ui/src/components/modal/modal.tsx index bbffba11..e953c5ab 100644 --- a/packages/connect-ui/src/components/modal/modal.tsx +++ b/packages/connect-ui/src/components/modal/modal.tsx @@ -14,12 +14,14 @@ export class Modal { @Prop() defaultProviders: WebBTCProvider[]; @Prop() installedProviders: WebBTCProvider[]; + @Prop() persistSelection: boolean; + @Prop() callback: Function; @Element() modalEl: HTMLConnectModalElement; handleSelectProvider(providerId: string) { - setSelectedProviderId(providerId); + if (this.persistSelection) setSelectedProviderId(providerId); this.modalEl.remove(); this.callback(); } diff --git a/packages/connect-ui/src/components/modal/readme.md b/packages/connect-ui/src/components/modal/readme.md index fd237547..a4770a7d 100644 --- a/packages/connect-ui/src/components/modal/readme.md +++ b/packages/connect-ui/src/components/modal/readme.md @@ -7,11 +7,12 @@ ## Properties -| Property | Attribute | Description | Type | Default | -| -------------------- | --------- | ----------- | ------------------ | ----------- | -| `callback` | -- | | `Function` | `undefined` | -| `defaultProviders` | -- | | `WebBTCProvider[]` | `undefined` | -| `installedProviders` | -- | | `WebBTCProvider[]` | `undefined` | +| Property | Attribute | Description | Type | Default | +| -------------------- | ------------------- | ----------- | ------------------ | ----------- | +| `callback` | -- | | `Function` | `undefined` | +| `defaultProviders` | -- | | `WebBTCProvider[]` | `undefined` | +| `installedProviders` | -- | | `WebBTCProvider[]` | `undefined` | +| `persistSelection` | `persist-selection` | | `boolean` | `undefined` | ---------------------------------------------- diff --git a/packages/connect/src/ui.ts b/packages/connect/src/ui.ts index e35f9158..a186f44f 100644 --- a/packages/connect/src/ui.ts +++ b/packages/connect/src/ui.ts @@ -45,7 +45,11 @@ export type ActionOptions = ( defaultProviders?: WebBTCProvider[]; }; -function wrapConnectCall(action: (o: O, p?: StacksProvider) => any) { +/** Helper higher-order function for creating connect methods that allow for wallet selection */ +function wrapConnectCall( + action: (o: O, p?: StacksProvider) => any, + persistSelection = true +) { return function wrapped(o: O, p?: StacksProvider) { if (p) return action(o, p); // if a provider is passed, use it @@ -62,6 +66,7 @@ function wrapConnectCall(action: (o: O, p?: StacksProvi const element = document.createElement('connect-modal'); element.defaultProviders = defaultProviders; element.installedProviders = installedProviders; + element.persistSelection = persistSelection; element.callback = () => action(o); document.body.appendChild(element); @@ -77,7 +82,7 @@ function wrapConnectCall(action: (o: O, p?: StacksProvi } /** A wrapper for selecting a wallet (if none is selected) and then calling the {@link authenticate} action. */ -export const showConnect = wrapConnectCall(authenticate); +export const showConnect = wrapConnectCall(authenticate, false); /** A wrapper for selecting a wallet (if none is selected) and then calling the {@link openSTXTransfer} action. */ export const showSTXTransfer = wrapConnectCall(openSTXTransfer);