types APIs
- SimpleOptions
- RootState
- User
- ChainType
- FeedbackCategoryAPI
- FeedbackStatusAPI
- FeedbackUserProfileAPI
- NavItems
- SingleNavItem
- NonNullableChildrenDeep
- SingleArticle
- ColumnType
- DataType
- Hub
- PluginConfig
- RawEventMessage
- DualStakingInfo
- StakingInfo
- SyrupInfo
- CommonStakingInfo
- LairInfo
- StakingBasic
- DualStakingBasic
- SyrupBasic
- Questionnaire
- TaskStatuses
- LoginPayload
- SignupPayload
- MutationType
- ProteinSize
- Config
- Themes
- defaults
- CoordinateSpaceInitial
- Background
- Metric
- Metadata
- TManageValue
- Domain
- Organization
- OrganizationTag
- Scan
- ScanSchema
- Query
- SavedSearch
- Role
- ScanTask
- Vulnerability
- GenericObject
- Annotation
- AnnotationList
- VideoAnnotation
- IconName
- IllustrationName
- INotification
- BottomTabScreens
- KYCScreens
- CCVPScreens
- LoginScreens
- PreAuthScreens
- SignUpScreens
- TFAScreens
- PNVScreens
- ProfileScreens
- SecurityScreens
- SMTYFScreens
- WalletScreens
- WithdrawalScreens
- StackNavigationProps
- Coin
- Country
- TransactionStatus
- SetApiActionPayloadInterface
- LoadingStateInterface
- MessageStateInterface
- UiOptionType
- ApiDiffInterface
- ApiStateInterface
- Account
- NFT
- NFTDetails
- AlertType
- DefaultTemplateOptions
- ProviderProps
- AlertTimer
- AlertInstance
- AlertOptions
- TemplateAlertOptions
- AlertContainerFactory
- ChainBase
- ChainNetwork
- WalletId
- ProposalType
- ChainEventNotification
- WebsocketMessageNames
- WebsocketNamespaces
- NotificationCategories
- InviteCodeAttributes
- IPostNotificationData
- ChainCategoryType
- Screens
- NavigationProperty
- IP
- Maybe
- Tuple
- ChainProperties
- ApiPromise
- ApiAction
- BlueprintOptions
- ContractQuery
- ContractOptions
- ContractTx
- KeyringPair
- ContractDryRunParams
- InstantiateData
- SubmittableExtrinsic
- DbState
- OnInstantiateSuccess$Code
- OnInstantiateSuccess$Hash
- InstantiateState
- ApiState
- OrFalsy
- Bytes
- AbiParam
- Registry
- Weight
- SubmittableResult
- Hash
- CodeBundleDocument
- MyCodeBundles
- ContractDocument
- MyContracts
- Database
- DbStatistics
- UserDocument
- QueuedTxOptions
- TransactionsState
- DropdownOption
- DropdownProps
- ValidFormField
- SetState
- BN
- CallResult
- ContractPromise
- RegistryError
- Abi
- TypeDef
- Validation
- FileState
- UseWeight
- ArgComponentProps
- TypeDefInfo
- UseMetadata
- AbiMessage
- AbiConstructor
- InstantiateProps
- CodeSubmittableResult
- BlueprintSubmittableResult
- BlueprintPromise
- Step2FormData
- TxOptions
- TransactionsQueue
- Keyring
- DbQuery
- UseBalance
- CodeBundle
- ValidateFn
- MetadataState
- UseStepper
- UseToggle
- Party
- Restaurant
- BoardMember
- Id
- Label
- Priority
- Avatar
- PriorityValue
- AuthSetup
- IColumn
- Board
- ITask
- TaskComment
- NewTaskComment
- WithTheme
- UserDetail
- TasksByColumn
- NewTask
- ValueOf
- APIResponse
- Nullable
- Currency
- Route
- Author
- Post
- Category
- Watch
- ComputeCallback
Other Related APIs
types#TransactionsQueue TypeScript Examples
The following examples show how to use
types#TransactionsQueue.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: TransactionsContext.tsx From contracts-ui with GNU General Public License v3.0 | 4 votes |
export function TransactionsContextProvider({
children,
}: React.PropsWithChildren<Partial<TransactionsState>>) {
const { api, keyring, systemChainType } = useApi();
const [txs, setTxs] = useState<TransactionsQueue>({});
function queue(options: TxOptions): number {
setTxs({
...txs,
[nextId]: {
...options,
status: Status.Queued,
events: {},
},
});
return nextId;
}
async function process(id: number) {
const tx = txs[id];
if (tx) {
const { extrinsic, accountId, isValid, onSuccess, onError } = tx;
setTxs({ ...txs, [id]: { ...tx, status: Status.Processing } });
let injector, accountOrPair;
try {
injector = await web3FromAddress(accountId);
accountOrPair = accountId;
} catch (e) {
accountOrPair = keyring.getPair(accountId);
}
try {
const unsub = await extrinsic.signAndSend(
accountOrPair,
{ signer: injector?.signer || undefined },
async result => {
if (isResultReady(result, systemChainType)) {
const events: Record<string, number> = {};
result.events.forEach(record => {
const { event } = record;
const key = `${event.section}:${event.method}`;
if (!events[key]) {
events[key] = 1;
} else {
events[key]++;
}
});
if (!isValid(result)) {
setTxs({ ...txs, [id]: { ...tx, status: Status.Error, events } });
let message = 'Transaction failed';
if (result.dispatchError?.isModule) {
const decoded = api.registry.findMetaError(result.dispatchError.asModule);
message = `${decoded.section.toUpperCase()}.${decoded.method}: ${decoded.docs}`;
}
onError && onError(result);
throw new Error(message);
}
onSuccess && (await onSuccess(result));
setTxs({ ...txs, [id]: { ...tx, status: Status.Success, events } });
unsub();
nextId++;
}
}
);
} catch (error) {
setTxs({ ...txs, [id]: { ...tx, status: Status.Error } });
console.error(error);
}
}
}
function dismiss(id: number) {
const newTxs = { ...txs };
delete newTxs[id];
setTxs(newTxs);
}
useEffect((): (() => void) => {
let autoDismiss: NodeJS.Timeout;
if (!isEmptyObj(txs)) {
const completed: number[] = [];
for (const id in txs) {
if (txs[id]?.status === 'error' || txs[id]?.status === 'success') {
completed.push(parseInt(id));
}
}
if (completed.length > 0) {
autoDismiss = setTimeout((): void => {
const newTxs = { ...txs };
completed.forEach(id => delete newTxs[id]);
setTxs(newTxs);
}, 5000);
}
}
return () => clearTimeout(autoDismiss);
}, [txs]);
const state = {
txs,
dismiss,
process,
queue,
};
return (
<TransactionsContext.Provider value={state}>
<Transactions {...state} />
{children}
</TransactionsContext.Provider>
);
}