mirror of
https://github.com/pezkuwichain/pezkuwi-apps.git
synced 2026-07-23 23:35:45 +00:00
feat: initial Pezkuwi Apps rebrand from polkadot-apps
Rebranded terminology: - Polkadot → Pezkuwi - Kusama → Dicle - Westend → Zagros - Rococo → PezkuwiChain - Substrate → Bizinikiwi - parachain → teyrchain Custom logos with Kurdistan brand colors (#e6007a → #86e62a): - bizinikiwi-hexagon.svg - sora-bizinikiwi.svg - hezscanner.svg - heztreasury.svg - pezkuwiscan.svg - pezkuwistats.svg - pezkuwiassembly.svg - pezkuwiholic.svg
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
// Copyright 2017-2025 @pezkuwi/app-extrinsics authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { SubmittableExtrinsic, SubmittableExtrinsicFunction } from '@pezkuwi/api/types';
|
||||
import type { RawParam } from '@pezkuwi/react-params/types';
|
||||
import type { DecodedExtrinsic } from './types.js';
|
||||
|
||||
import React, { useCallback, useState } from 'react';
|
||||
|
||||
import { Button, InputAddress, MarkError, TxButton } from '@pezkuwi/react-components';
|
||||
import { useApi } from '@pezkuwi/react-hooks';
|
||||
import { Extrinsic } from '@pezkuwi/react-params';
|
||||
import { BalanceFree } from '@pezkuwi/react-query';
|
||||
|
||||
import Decoded from './Decoded.js';
|
||||
import { useTranslation } from './translate.js';
|
||||
|
||||
interface Props {
|
||||
className?: string;
|
||||
defaultValue: DecodedExtrinsic | null;
|
||||
}
|
||||
|
||||
interface DefaultExtrinsic {
|
||||
defaultArgs?: RawParam[];
|
||||
defaultFn: SubmittableExtrinsicFunction<'promise'>;
|
||||
}
|
||||
|
||||
function extractDefaults (value: DecodedExtrinsic | null, defaultFn: SubmittableExtrinsicFunction<'promise'>): DefaultExtrinsic {
|
||||
if (!value) {
|
||||
return { defaultFn };
|
||||
}
|
||||
|
||||
return {
|
||||
defaultArgs: value.call.args.map((value) => ({
|
||||
isValid: true,
|
||||
value
|
||||
})),
|
||||
defaultFn: value.fn
|
||||
};
|
||||
}
|
||||
|
||||
function Selection ({ className, defaultValue }: Props): React.ReactElement<Props> {
|
||||
const { t } = useTranslation();
|
||||
const { apiDefaultTxSudo } = useApi();
|
||||
const [accountId, setAccountId] = useState<string | null>(null);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [extrinsic, setExtrinsic] = useState<SubmittableExtrinsic<'promise'> | null>(null);
|
||||
const [{ defaultArgs, defaultFn }] = useState<DefaultExtrinsic>(() => extractDefaults(defaultValue, apiDefaultTxSudo));
|
||||
|
||||
const _onExtrinsicChange = useCallback(
|
||||
(method?: SubmittableExtrinsic<'promise'>) =>
|
||||
setExtrinsic(() => method || null),
|
||||
[]
|
||||
);
|
||||
|
||||
const _onExtrinsicError = useCallback(
|
||||
(error?: Error | null) =>
|
||||
setError(error ? error.message : null),
|
||||
[]
|
||||
);
|
||||
|
||||
return (
|
||||
<div className={className}>
|
||||
<InputAddress
|
||||
label={t('using the selected account')}
|
||||
labelExtra={
|
||||
<BalanceFree
|
||||
label={<label>{t('free balance')}</label>}
|
||||
params={accountId}
|
||||
/>
|
||||
}
|
||||
onChange={setAccountId}
|
||||
type='account'
|
||||
/>
|
||||
<Extrinsic
|
||||
defaultArgs={defaultArgs}
|
||||
defaultValue={defaultFn}
|
||||
label={t('submit the following extrinsic')}
|
||||
onChange={_onExtrinsicChange}
|
||||
onError={_onExtrinsicError}
|
||||
/>
|
||||
<Decoded
|
||||
extrinsic={extrinsic}
|
||||
isCall
|
||||
/>
|
||||
{error && !extrinsic && (
|
||||
<MarkError content={error} />
|
||||
)}
|
||||
<Button.Group>
|
||||
<TxButton
|
||||
extrinsic={extrinsic}
|
||||
icon='sign-in-alt'
|
||||
isUnsigned
|
||||
label={t('Submit Unsigned')}
|
||||
withSpinner
|
||||
/>
|
||||
<TxButton
|
||||
accountId={accountId}
|
||||
extrinsic={extrinsic}
|
||||
icon='sign-in-alt'
|
||||
label={t('Submit Transaction')}
|
||||
/>
|
||||
</Button.Group>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default React.memo(Selection);
|
||||
Reference in New Issue
Block a user