Skip to content

Commit

Permalink
Merge pull request #435 from ergolabs/dev
Browse files Browse the repository at this point in the history
Rlease 1.3.4
  • Loading branch information
yasha-black authored Mar 22, 2022
2 parents 2d673e3 + 98ef191 commit 7430d25
Show file tree
Hide file tree
Showing 11 changed files with 82 additions and 19 deletions.
12 changes: 11 additions & 1 deletion src/api/addresses.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { publishReplay, refCount, switchMap } from 'rxjs';
import { Address } from '@ergolabs/ergo-sdk';
import { Observable, publishReplay, refCount, switchMap } from 'rxjs';

import { selectedNetwork$ } from '../network/network';

Expand All @@ -7,3 +8,12 @@ export const addresses$ = selectedNetwork$.pipe(
publishReplay(1),
refCount(),
);

export const getAddresses = (): Observable<Address[]> =>
selectedNetwork$.pipe(switchMap((network) => network.getAddresses()));

export const getUsedAddresses = (): Observable<Address[]> =>
selectedNetwork$.pipe(switchMap((network) => network.getUsedAddresses()));

export const getUnusedAddresses = (): Observable<Address[]> =>
selectedNetwork$.pipe(switchMap((network) => network.getUnusedAddresses()));
1 change: 1 addition & 0 deletions src/common/models/AmmPool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ export class AmmPool implements Searchable {
const normalizedTerm = term.toLowerCase().replaceAll('/', '');

return (
this.pool.id?.toLowerCase().includes(normalizedTerm) ||
this.x.asset.name?.toLowerCase().includes(normalizedTerm) ||
this.y.asset.name?.toLowerCase().includes(normalizedTerm) ||
`${this.x.asset.name?.toLowerCase()}${this.y.asset.name?.toLowerCase()}`.includes(
Expand Down
38 changes: 27 additions & 11 deletions src/context/SettingsContext.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { PublicKey, publicKeyFromAddress } from '@ergolabs/ergo-sdk';
import { Address, PublicKey, publicKeyFromAddress } from '@ergolabs/ergo-sdk';
import { useLocalStorage } from '@rehooks/local-storage';
import React, { createContext, useContext, useEffect } from 'react';

import { addresses$ } from '../api/addresses';
// import { LocalStorageReturnValue } from '@rehooks/local-storage/lib/use-localstorage';
import { getUnusedAddresses, getUsedAddresses } from '../api/addresses';
import { ERG_EXPLORER_URL } from '../common/constants/env';
import { MIN_NITRO } from '../common/constants/erg';
import { defaultMinerFee, defaultSlippage } from '../common/constants/settings';
Expand Down Expand Up @@ -49,21 +48,38 @@ const defaultContextValue: LocalStorageReturnValue<Settings> = [

const SettingsContext = createContext(defaultContextValue);

const isCurrentAddressValid = (
address: Address | undefined,
addresses: Address[],
): boolean => !!address && addresses.includes(address);

export const SettingsProvider = ({
children,
}: React.PropsWithChildren<unknown>): JSX.Element => {
const ctxValue = useLocalStorage('settings', DefaultSettings);
const [addresses] = useObservable(addresses$);
const [usedAddresses] = useObservable(getUsedAddresses());
const [unusedAddresses] = useObservable(getUnusedAddresses());

useEffect(() => {
if (!ctxValue[0].address && addresses) {
ctxValue[1]({
...ctxValue[0],
address: addresses[0],
pk: publicKeyFromAddress(addresses[0]),
});
if (!usedAddresses || !unusedAddresses) {
return;
}
let newSelectedAddress: Address;
const addresses = unusedAddresses.concat(usedAddresses);
const currentSelectedAddress = ctxValue[0].address;

if (isCurrentAddressValid(currentSelectedAddress, addresses)) {
newSelectedAddress = currentSelectedAddress!;
} else {
newSelectedAddress = unusedAddresses[0] || usedAddresses[0];
}
}, [addresses]);

ctxValue[1]({
...ctxValue[0],
address: newSelectedAddress,
pk: publicKeyFromAddress(newSelectedAddress),
});
}, [usedAddresses, unusedAddresses]);

return (
<SettingsContext.Provider value={ctxValue}>
Expand Down
5 changes: 5 additions & 0 deletions src/network/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ export interface Network {
readonly connectWallet: (w: Wallet) => Observable<any>;
readonly disconnectWallet: () => void;
readonly useNetworkAsset: () => [AssetInfo, boolean, Error];
readonly getUsedAddresses: () => Observable<Address[]>;
readonly getUnusedAddresses: () => Observable<Address[]>;
readonly getAddresses: () => Observable<Address[]>;
}

export enum WalletState {
Expand All @@ -45,6 +48,8 @@ export interface Wallet {
readonly icon: ReactNode;
readonly definition: 'experimental' | 'recommended' | 'default';
readonly extensionLink: string;
readonly getUsedAddresses: () => Observable<Address[]>;
readonly getUnusedAddresses: () => Observable<Address[]>;
readonly getAddresses: () => Observable<Address[]>;
readonly connectWallet: () => Observable<boolean | ReactNode>;
readonly getUtxos: () => Observable<ErgoBox[]>;
Expand Down
14 changes: 14 additions & 0 deletions src/network/ergo/addresses/addresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,20 @@ export const getAddresses = (): Observable<string[]> =>
switchMap((wallet) => wallet.getAddresses()),
);

export const getUsedAddresses = (): Observable<string[]> =>
selectedWalletState$.pipe(
filter((state) => state === WalletState.CONNECTED),
switchMap(() => selectedWallet$.pipe(filter(Boolean))),
switchMap((wallet) => wallet.getUsedAddresses()),
);

export const getUnusedAddresses = (): Observable<string[]> =>
selectedWalletState$.pipe(
filter((state) => state === WalletState.CONNECTED),
switchMap(() => selectedWallet$.pipe(filter(Boolean))),
switchMap((wallet) => wallet.getUnusedAddresses()),
);

export const addresses$: Observable<string[]> = appTick$.pipe(
switchMap(() => getAddresses()),
publishReplay(1),
Expand Down
10 changes: 9 additions & 1 deletion src/network/ergo/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import { Network } from '../common';
import { addresses$ } from './addresses/addresses';
import {
addresses$,
getAddresses,
getUnusedAddresses,
getUsedAddresses,
} from './addresses/addresses';
import { ammPools$ } from './ammPools/ammPools';
import { assetBalance$ } from './balance/assetBalance';
import { lpBalance$ } from './balance/lpBalance';
Expand Down Expand Up @@ -34,4 +39,7 @@ export const ergoNetwork: Network = {
selectedWallet$,
selectedWalletState$,
disconnectWallet,
getAddresses,
getUsedAddresses,
getUnusedAddresses,
};
4 changes: 2 additions & 2 deletions src/network/ergo/wallets/nautilus/getAddresses.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { Address } from '@ergolabs/ergo-sdk';
import { from, map, Observable, zip } from 'rxjs';

const getUsedAddresses = (): Observable<Address[]> =>
export const getUsedAddresses = (): Observable<Address[]> =>
from(
ergoConnector.nautilus
.getContext()
.then((context) => context.get_used_addresses()),
);

const getUnusedAddresses = (): Observable<Address[]> =>
export const getUnusedAddresses = (): Observable<Address[]> =>
from(
ergoConnector.nautilus
.getContext()
Expand Down
8 changes: 7 additions & 1 deletion src/network/ergo/wallets/nautilus/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ import React from 'react';
import { ReactComponent as NautilusLogo } from '../../../../assets/icons/nautilus-logo-icon.svg';
import { Wallet } from '../../../common';
import { connectWallet } from './connectWallet';
import { getAddresses } from './getAddresses';
import {
getAddresses,
getUnusedAddresses,
getUsedAddresses,
} from './getAddresses';
import { getUtxos } from './getUtxos';
import { supportedFeatures } from './supportedFeatures';

Expand All @@ -15,6 +19,8 @@ export const Nautilus: Wallet = {
'https://chrome.google.com/webstore/detail/nautilus-wallet/gjlmehlldlphhljhpnlddaodbjjcchai',
connectWallet,
getUtxos,
getUsedAddresses,
getUnusedAddresses,
getAddresses,
supportedFeatures,
};
4 changes: 2 additions & 2 deletions src/network/ergo/wallets/yoroi/getAddresses.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Address } from '@ergolabs/ergo-sdk';
import { from, map, Observable, zip } from 'rxjs';

const getUsedAddresses = (): Observable<Address[]> =>
export const getUsedAddresses = (): Observable<Address[]> =>
from(ergo.get_used_addresses());

const getUnusedAddresses = (): Observable<Address[]> =>
export const getUnusedAddresses = (): Observable<Address[]> =>
from(ergo.get_unused_addresses());

export const getAddresses = (): Observable<Address[]> =>
Expand Down
3 changes: 3 additions & 0 deletions src/network/ergo/wallets/yoroi/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React from 'react';

import { ReactComponent as YoroiLogo } from '../../../../assets/icons/yoroi-logo-icon.svg';
import { Wallet } from '../../../common';
import { getUnusedAddresses, getUsedAddresses } from '../nautilus/getAddresses';
import { connectWallet } from './connectWallet';
import { getAddresses } from './getAddresses';
import { getNotification } from './getNotification';
Expand All @@ -19,6 +20,8 @@ export const Yoroi: Wallet = {
getUtxos,
getNotification,
onDisconnect,
getUsedAddresses,
getUnusedAddresses,
getAddresses,
supportedFeatures,
};
2 changes: 1 addition & 1 deletion src/pages/Pool/Liquidity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ const Liquidity = (): JSX.Element => {
<Input
onChange={handleSearchChange}
prefix={<SearchOutlined />}
placeholder="Search"
placeholder="Type token name or pool id"
size="large"
style={{ width: 300 }}
/>
Expand Down

0 comments on commit 7430d25

Please sign in to comment.