07abc2b1eb
* feat: 470 edit orders hook and @vegaprotocol/vegawallet-service-api-client@0.4.14 * fix: 470 add methods for dialog intent and title * fix: #657 rename order-list lib to orders * chore: #657 move hooks to orders lib * chore: #657 vega tx dialog used for order cancellation and order submission * chore: #657 use client subscribe and unsubscribe on reset, refactor vegatxdialog * fix: #657 revert script src=./env-config.js ending * fix: #657 format project.json * Update project.json * fix: #657 cancel all subs and async tasks in useffect cleanup function * feat: #657 styling updates on vega order dialog * fix: #657 rename set dialog open and awaiting confirmation dialog update * fix: #657 updates on cancel order id check * fix: #657 fix vega tx dialog test * fix: #657 fix cypress trading-deal-tciket test * fix: #657 fix data-testid market test * Update libs/orders/README.md Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> * Update libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> * Update libs/wallet/src/vega-transaction-dialog/vega-transaction-dialog.tsx Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> * Update libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> * Update libs/wallet/src/vega-order-transaction-dialog/vega-order-transaction-dialog.tsx Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> * fix: #657 remove the magic string and use the ordertype enum from types package * fix: #657 guarantee that order.id is present at this point or we need to determine the id of the order * fix: #657 fix translation in dialog * fix: #657 rename wallet types, delete ticket query, set finalized order null in submit * fix: #657 fix deal ticket steps test * fix: #657 remove settings.json * fix: #657 use order submit in orders lib * fix: #463 final modal links to block explorer * fix: #745 long/short instead of buy/sell * fix: #657 use only one vega tx dialog * fix: #657 keep ref of subscription and unsubscribe * fix: #657 hide cancelled orders * fix: #657 sub only when id set * fix: WIP: trying to unsub when order updated * fix: #745 long/short instead of buy/sell * fix: ensure observable defined * fix: #657 remove redundant test * Update libs/orders/src/lib/order-hooks/use-order-submit.ts * fix: failing test due to resizeobserver loop limit exceeded * fix: lint * fix: #657 fix test resize observer loop limit exceeded Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> Co-authored-by: Matthew Russell <mattrussell36@gmail.com> Co-authored-by: Joe <joe@vega.xyz>
116 lines
3.1 KiB
TypeScript
116 lines
3.1 KiB
TypeScript
import { LocalStorage, t } from '@vegaprotocol/react-helpers';
|
|
import type { ReactNode } from 'react';
|
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
import type { VegaKeyExtended, VegaWalletContextShape } from '.';
|
|
import type { VegaConnector } from './connectors/vega-connector';
|
|
import { VegaWalletContext } from './context';
|
|
import { WALLET_KEY } from './storage-keys';
|
|
import type { TransactionSubmission } from './wallet-types';
|
|
|
|
interface VegaWalletProviderProps {
|
|
children: ReactNode;
|
|
}
|
|
|
|
export const VegaWalletProvider = ({ children }: VegaWalletProviderProps) => {
|
|
// Current selected publicKey, default with value from local storage
|
|
const [publicKey, setPublicKey] = useState<string | null>(() => {
|
|
const pk = LocalStorage.getItem(WALLET_KEY);
|
|
return pk ? pk : null;
|
|
});
|
|
|
|
// Keypair objects retrieved from the connector
|
|
const [keypairs, setKeypairs] = useState<VegaKeyExtended[] | null>(null);
|
|
|
|
// Reference to the current connector instance
|
|
const connector = useRef<VegaConnector | null>(null);
|
|
|
|
const connect = useCallback(
|
|
async (c: VegaConnector) => {
|
|
connector.current = c;
|
|
try {
|
|
const res = await connector.current.connect();
|
|
|
|
if (!res) {
|
|
return null;
|
|
}
|
|
|
|
const publicKeysWithName = res.map((pk) => {
|
|
const nameMeta = pk.meta?.find((m) => m.key === 'name');
|
|
return {
|
|
...pk,
|
|
name: nameMeta?.value ? nameMeta.value : t('None'),
|
|
};
|
|
});
|
|
|
|
setKeypairs(publicKeysWithName);
|
|
if (publicKey === null) {
|
|
setPublicKey(publicKeysWithName[0].pub);
|
|
}
|
|
|
|
return publicKeysWithName;
|
|
} catch (err) {
|
|
return null;
|
|
}
|
|
},
|
|
[publicKey]
|
|
);
|
|
|
|
const disconnect = useCallback(async () => {
|
|
try {
|
|
await connector.current?.disconnect();
|
|
setKeypairs(null);
|
|
setPublicKey(null);
|
|
connector.current = null;
|
|
LocalStorage.removeItem(WALLET_KEY);
|
|
return true;
|
|
} catch (err) {
|
|
console.error(err);
|
|
return false;
|
|
}
|
|
}, []);
|
|
|
|
const sendTx = useCallback((body: TransactionSubmission) => {
|
|
if (!connector.current) {
|
|
return null;
|
|
}
|
|
|
|
return connector.current.sendTx(body);
|
|
}, []);
|
|
|
|
// Current selected keypair derived from publicKey state
|
|
const keypair = useMemo(() => {
|
|
const found = keypairs?.find((x) => x.pub === publicKey);
|
|
|
|
if (found) {
|
|
return found;
|
|
}
|
|
|
|
return null;
|
|
}, [publicKey, keypairs]);
|
|
|
|
// Whenever selected public key changes store it
|
|
useEffect(() => {
|
|
if (publicKey) {
|
|
LocalStorage.setItem(WALLET_KEY, publicKey);
|
|
}
|
|
}, [publicKey]);
|
|
|
|
const contextValue = useMemo<VegaWalletContextShape>(() => {
|
|
return {
|
|
keypair,
|
|
keypairs,
|
|
selectPublicKey: setPublicKey,
|
|
connect,
|
|
disconnect,
|
|
connector: connector.current,
|
|
sendTx,
|
|
} as VegaWalletContextShape;
|
|
}, [keypair, keypairs, setPublicKey, connect, disconnect, connector, sendTx]);
|
|
|
|
return (
|
|
<VegaWalletContext.Provider value={contextValue}>
|
|
{children}
|
|
</VegaWalletContext.Provider>
|
|
);
|
|
};
|