Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved providers filter (change for the issue https://github.com/getAlby/bitcoin-connect/issues/92) #253

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 49 additions & 12 deletions src/components/bc-connector-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,61 @@ import './connectors/index.js';
@customElement('bc-connector-list')
export class ConnectorList extends withTwind()(BitcoinConnectElement) {
override render() {
// TODO: find a better way to filter these when multiple filters exist
// TODO: allow re-ordering connectors
const connectors: TemplateResult<1>[] = [];
connectors.push(html`<bc-alby-nwc-connector></bc-alby-nwc-connector>`);
connectors.push(html`<bc-mutiny-nwc-connector></bc-mutiny-nwc-connector>`);
connectors.push(html`<bc-umbrel-nwc-connector></bc-umbrel-nwc-connector>`);
connectors.push(html`<bc-nwc-connector></bc-nwc-connector>`);
connectors.push(html`<bc-lnfi-nwc-connector></bc-lnfi-nwc-connector>`);
if (!this._filters || this._filters.indexOf('nwc') === -1) {

if (this._filters?.length && this._filters?.indexOf('nwc') === -1) {
// Only certain providers listed in order they are mentioned in the filters list
this._filters.forEach((name) => {
switch (name) {
case 'alby':
connectors.push(html`<bc-alby-nwc-connector></bc-alby-nwc-connector>`);
break;
case 'mutiny':
connectors.push(html`<bc-mutiny-nwc-connector></bc-mutiny-nwc-connector>`);
break;
case 'umbrel':
connectors.push(html`<bc-umbrel-nwc-connector></bc-umbrel-nwc-connector>`);
break;
case 'nostr':
connectors.push(html`<bc-nwc-connector></bc-nwc-connector>`);
break;
case 'lnfi':
connectors.push(html`<bc-lnfi-nwc-connector></bc-lnfi-nwc-connector>`);
break;
case 'extension':
// TODO: is there a better way to check if a desktop extension exists?
if (window.webln) {
connectors.push(html`<bc-extension-connector></bc-extension-connector>`);
}
break;
case 'lnbits':
connectors.push(html`<bc-lnbits-connector></bc-lnbits-connector>`);
break;
case 'lnc':
connectors.push(html`<bc-lnc-connector></bc-lnc-connector>`);
break;
}
})
} else if (this._filters?.length && this._filters?.indexOf('nwc') !== -1) {
// Only nwc providers listed
connectors.push(html`<bc-alby-nwc-connector></bc-alby-nwc-connector>`);
connectors.push(html`<bc-mutiny-nwc-connector></bc-mutiny-nwc-connector>`);
connectors.push(html`<bc-umbrel-nwc-connector></bc-umbrel-nwc-connector>`);
connectors.push(html`<bc-nwc-connector></bc-nwc-connector>`);
connectors.push(html`<bc-lnfi-nwc-connector></bc-lnfi-nwc-connector>`);
} else {
// All providers listed
connectors.push(html`<bc-alby-nwc-connector></bc-alby-nwc-connector>`);
connectors.push(html`<bc-mutiny-nwc-connector></bc-mutiny-nwc-connector>`);
connectors.push(html`<bc-umbrel-nwc-connector></bc-umbrel-nwc-connector>`);
connectors.push(html`<bc-nwc-connector></bc-nwc-connector>`);
connectors.push(html`<bc-lnfi-nwc-connector></bc-lnfi-nwc-connector>`);
// TODO: is there a better way to check if a desktop extension exists?
if (window.webln) {
connectors.push(
html`<bc-extension-connector></bc-extension-connector>`
);
connectors.push(html`<bc-extension-connector></bc-extension-connector>`);
}
connectors.push(html`<bc-lnbits-connector></bc-lnbits-connector>`);
connectors.push(html`<bc-lnc-connector></bc-lnc-connector>`);

}

return html`
Expand Down
11 changes: 8 additions & 3 deletions src/components/bc-start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {disconnectSection} from './templates/disconnectSection';
import './bc-balance';
import store from '../state/store';
import './bc-currency-switcher';
import {ConnectorFilterOptions} from "../types/ConnectorFilter";

// TODO: split up this component into disconnected and connected
@customElement('bc-start')
Expand All @@ -23,14 +24,17 @@ export class Start extends withTwind()(BitcoinConnectElement) {
store.getState().bitcoinConnectConfig.showBalance &&
store.getState().supports('getBalance');

// TODO: handle unsubscribe
// TODO: handle unsubscribe
store.subscribe((store) => {
this._showBalance =
store.bitcoinConnectConfig.showBalance && store.supports('getBalance');
this._filters = store.bitcoinConnectConfig.filters;
});
}

override render() {
const isOneProviderOption = this._filters?.length === 1 && this._filters[0] !== 'nwc' && ConnectorFilterOptions.includes(this._filters[0]);

return html`<div
class="flex flex-col justify-center items-center w-full font-sans"
>
Expand Down Expand Up @@ -60,8 +64,9 @@ export class Start extends withTwind()(BitcoinConnectElement) {
'text-neutral-primary'
]} w-64 max-w-full text-center"
>
How would you like to
connect${this._appName ? `\nto ${this._appName}` : ''}?
${isOneProviderOption
? 'Please connect your wallet'
: 'How would you like to connect'}${this._appName ? `\nto ${this._appName}` : ''}${isOneProviderOption ? '' : '?'}
</h1>

<bc-connector-list></bc-connector-list>
Expand Down
3 changes: 2 additions & 1 deletion src/types/ConnectorFilter.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export type ConnectorFilter = 'nwc';
export type ConnectorFilter = 'nwc' | 'alby' | 'mutiny' | 'umbrel' | 'nostr' | 'lnfi' | 'extension' | 'lnbits' | 'lnc';
export const ConnectorFilterOptions = ['nwc', 'alby', 'mutiny', 'umbrel', 'nostr', 'lnfi', 'extension', 'lnbits', 'lnc'];