Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
import { useCallback, useState } from 'react';
|
2022-03-30 09:49:48 +00:00
|
|
|
import type { Transaction } from './types';
|
2022-03-29 22:52:51 +00:00
|
|
|
import { useVegaWallet } from './hooks';
|
2022-03-30 09:49:48 +00:00
|
|
|
import type { SendTxError } from './context';
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
|
|
|
|
export enum VegaTxStatus {
|
|
|
|
Default = 'Default',
|
|
|
|
AwaitingConfirmation = 'AwaitingConfirmation',
|
|
|
|
Rejected = 'Rejected',
|
|
|
|
Pending = 'Pending',
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TransactionState {
|
|
|
|
status: VegaTxStatus;
|
|
|
|
error: object | null;
|
|
|
|
hash: string | null;
|
|
|
|
signature: string | null;
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useVegaTransaction = () => {
|
|
|
|
const { sendTx } = useVegaWallet();
|
|
|
|
const [transaction, _setTransaction] = useState<TransactionState>({
|
|
|
|
status: VegaTxStatus.Default,
|
|
|
|
error: null,
|
|
|
|
hash: null,
|
|
|
|
signature: null,
|
|
|
|
});
|
|
|
|
|
|
|
|
const setTransaction = useCallback((update: Partial<TransactionState>) => {
|
|
|
|
_setTransaction((curr) => ({
|
|
|
|
...curr,
|
|
|
|
...update,
|
|
|
|
}));
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const handleError = useCallback(
|
|
|
|
(error: SendTxError) => {
|
|
|
|
setTransaction({ error, status: VegaTxStatus.Rejected });
|
|
|
|
},
|
|
|
|
[setTransaction]
|
|
|
|
);
|
|
|
|
|
|
|
|
const send = useCallback(
|
|
|
|
async (tx: Transaction) => {
|
|
|
|
setTransaction({
|
|
|
|
error: null,
|
|
|
|
hash: null,
|
|
|
|
signature: null,
|
|
|
|
status: VegaTxStatus.AwaitingConfirmation,
|
|
|
|
});
|
|
|
|
|
|
|
|
const res = await sendTx(tx);
|
|
|
|
|
|
|
|
if (res === null) {
|
|
|
|
setTransaction({ status: VegaTxStatus.Default });
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ('error' in res) {
|
|
|
|
handleError(res);
|
|
|
|
return null;
|
|
|
|
} else if ('errors' in res) {
|
|
|
|
handleError(res);
|
|
|
|
return null;
|
2022-03-28 19:34:45 +00:00
|
|
|
} else if (res.tx?.signature?.value && res.txHash) {
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
setTransaction({
|
|
|
|
status: VegaTxStatus.Pending,
|
|
|
|
hash: res.txHash,
|
|
|
|
signature: res.tx.signature.value,
|
|
|
|
});
|
|
|
|
return {
|
|
|
|
signature: res.tx.signature?.value,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
[sendTx, handleError, setTransaction]
|
|
|
|
);
|
|
|
|
|
|
|
|
const reset = useCallback(() => {
|
|
|
|
setTransaction({
|
|
|
|
error: null,
|
|
|
|
hash: null,
|
|
|
|
signature: null,
|
|
|
|
status: VegaTxStatus.Default,
|
|
|
|
});
|
|
|
|
}, [setTransaction]);
|
|
|
|
|
|
|
|
return { send, transaction, reset };
|
|
|
|
};
|