mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-06-23 22:11:02 +00:00
Add Pezkuwi SDK UI - Polkadot.js Apps clone
- Clone Polkadot.js Apps repository - Update package.json with Pezkuwi branding - Add Pezkuwi endpoint to production chains (wss://pezkuwichain.app:9944) - Create comprehensive README for SDK UI - Set up project structure with all packages Next steps: - Apply Kurdistan colors (Kesk, Sor, Zer, Spi + Black) to UI theme - Replace logos with Pezkuwi branding - Test build and deployment
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
// Copyright 2017-2025 @polkadot/app-extrinsics authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { ApiPromise } from '@polkadot/api';
|
||||
import type { SubmittableExtrinsic, SubmittableExtrinsicFunction } from '@polkadot/api/types';
|
||||
import type { Call } from '@polkadot/types/interfaces';
|
||||
import type { Props, RawParam } from '../types.js';
|
||||
|
||||
import React, { useState } from 'react';
|
||||
|
||||
import { useApi } from '@polkadot/react-hooks';
|
||||
import { isObject, isString } from '@polkadot/util';
|
||||
|
||||
import Extrinsic from './Extrinsic.js';
|
||||
|
||||
function isCall (f: unknown): f is Call {
|
||||
return isString((f as Call).section) && isString((f as Call).method);
|
||||
}
|
||||
|
||||
function isSubmittable (f: unknown): f is SubmittableExtrinsic<'promise'> {
|
||||
return isObject((f as SubmittableExtrinsic<'promise'>).method) && isString((f as SubmittableExtrinsic<'promise'>).method.section) && isString((f as SubmittableExtrinsic<'promise'>).method.method);
|
||||
}
|
||||
|
||||
function mapArgs (args: unknown[]): RawParam[] {
|
||||
return args.map((value) => ({
|
||||
isValid: true,
|
||||
value
|
||||
}));
|
||||
}
|
||||
|
||||
export function extractInitial (api: ApiPromise, initialValue: SubmittableExtrinsicFunction<'promise'>, input?: RawParam): { initialArgs?: RawParam[], initialValue: SubmittableExtrinsicFunction<'promise'> } {
|
||||
try {
|
||||
return input?.value
|
||||
? isCall(input.value)
|
||||
? {
|
||||
initialArgs: mapArgs(input.value.args),
|
||||
initialValue: api.tx[input.value.section][input.value.method]
|
||||
}
|
||||
: isSubmittable(input.value)
|
||||
? {
|
||||
initialArgs: mapArgs(input.value.method.args),
|
||||
initialValue: api.tx[input.value.method.section][input.value.method.method]
|
||||
}
|
||||
: { initialValue: (input.value as SubmittableExtrinsicFunction<'promise'>) }
|
||||
: { initialValue };
|
||||
} catch {
|
||||
return { initialValue };
|
||||
}
|
||||
}
|
||||
|
||||
function CallDisplay ({ className = '', defaultValue, isDisabled, isError, label, onChange, onEnter, onEscape, withLabel }: Props): React.ReactElement<Props> {
|
||||
const { api, apiDefaultTx } = useApi();
|
||||
|
||||
const [{ initialArgs, initialValue }] = useState(
|
||||
() => extractInitial(api, apiDefaultTx, defaultValue)
|
||||
);
|
||||
|
||||
return (
|
||||
<Extrinsic
|
||||
className={className}
|
||||
defaultArgs={initialArgs}
|
||||
defaultValue={initialValue}
|
||||
isDisabled={isDisabled}
|
||||
isError={isError}
|
||||
isPrivate={false}
|
||||
label={label}
|
||||
onChange={onChange}
|
||||
onEnter={onEnter}
|
||||
onEscape={onEscape}
|
||||
withLabel={withLabel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default React.memo(CallDisplay);
|
||||
@@ -0,0 +1,52 @@
|
||||
// Copyright 2017-2025 @polkadot/app-extrinsics authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { SubmittableExtrinsic, SubmittableExtrinsicFunction } from '@polkadot/api/types';
|
||||
import type { RawParam, RawParamOnChange, RawParamOnEnter, RawParamOnEscape } from '../types.js';
|
||||
|
||||
import React, { useCallback } from 'react';
|
||||
|
||||
import { Extrinsic as BaseExtrinsic } from '../Named/index.js';
|
||||
|
||||
interface Props {
|
||||
className?: string;
|
||||
defaultArgs?: RawParam[];
|
||||
defaultValue: SubmittableExtrinsicFunction<'promise'>;
|
||||
isDisabled?: boolean;
|
||||
isError?: boolean;
|
||||
isPrivate: boolean;
|
||||
label: React.ReactNode;
|
||||
onChange?: RawParamOnChange;
|
||||
onEnter?: RawParamOnEnter;
|
||||
onEscape?: RawParamOnEscape;
|
||||
withLabel?: boolean;
|
||||
}
|
||||
|
||||
function ExtrinsicDisplay ({ className = '', defaultArgs, defaultValue, isDisabled, isError, isPrivate, label, onChange, onEnter, onEscape, withLabel }: Props): React.ReactElement<Props> {
|
||||
const _onChange = useCallback(
|
||||
(value?: SubmittableExtrinsic<'promise'>) =>
|
||||
onChange && onChange({
|
||||
isValid: !!value,
|
||||
value
|
||||
}),
|
||||
[onChange]
|
||||
);
|
||||
|
||||
return (
|
||||
<BaseExtrinsic
|
||||
className={className}
|
||||
defaultArgs={defaultArgs}
|
||||
defaultValue={defaultValue}
|
||||
isDisabled={isDisabled}
|
||||
isError={isError}
|
||||
isPrivate={isPrivate}
|
||||
label={label}
|
||||
onChange={_onChange}
|
||||
onEnter={onEnter}
|
||||
onEscape={onEscape}
|
||||
withLabel={withLabel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default React.memo(ExtrinsicDisplay);
|
||||
@@ -0,0 +1,54 @@
|
||||
// Copyright 2017-2025 @polkadot/app-extrinsics authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { SubmittableExtrinsic } from '@polkadot/api/types';
|
||||
import type { Props, RawParam } from '../types.js';
|
||||
|
||||
import React, { useCallback, useState } from 'react';
|
||||
|
||||
import { useApi } from '@polkadot/react-hooks';
|
||||
|
||||
import { extractInitial } from './Call.js';
|
||||
import ExtrinsicDisplay from './Extrinsic.js';
|
||||
|
||||
function OpaqueCall ({ className = '', defaultValue, isDisabled, isError, label, onChange, onEnter, onEscape, withLabel }: Props): React.ReactElement<Props> {
|
||||
const { api, apiDefaultTxSudo } = useApi();
|
||||
|
||||
const [{ initialArgs, initialValue }] = useState(
|
||||
() => extractInitial(api, apiDefaultTxSudo, defaultValue)
|
||||
);
|
||||
|
||||
const _onChange = useCallback(
|
||||
({ isValid, value }: RawParam): void => {
|
||||
let callData = null;
|
||||
|
||||
if (isValid && value) {
|
||||
callData = (value as SubmittableExtrinsic<'promise'>).method.toHex();
|
||||
}
|
||||
|
||||
onChange && onChange({
|
||||
isValid,
|
||||
value: callData
|
||||
});
|
||||
},
|
||||
[onChange]
|
||||
);
|
||||
|
||||
return (
|
||||
<ExtrinsicDisplay
|
||||
className={className}
|
||||
defaultArgs={initialArgs}
|
||||
defaultValue={initialValue}
|
||||
isDisabled={isDisabled}
|
||||
isError={isError}
|
||||
isPrivate
|
||||
label={label}
|
||||
onChange={_onChange}
|
||||
onEnter={onEnter}
|
||||
onEscape={onEscape}
|
||||
withLabel={withLabel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default React.memo(OpaqueCall);
|
||||
@@ -0,0 +1,53 @@
|
||||
// Copyright 2017-2025 @polkadot/app-extrinsics authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Props, RawParam } from '../types.js';
|
||||
|
||||
import React, { useCallback, useState } from 'react';
|
||||
|
||||
import { useApi } from '@polkadot/react-hooks';
|
||||
|
||||
import { extractInitial } from './Call.js';
|
||||
import ExtrinsicDisplay from './Extrinsic.js';
|
||||
|
||||
function ProposalDisplay ({ className = '', defaultValue, isDisabled, isError, label, onChange, onEnter, onEscape, withLabel }: Props): React.ReactElement<Props> {
|
||||
const { api, apiDefaultTxSudo } = useApi();
|
||||
|
||||
const [{ initialArgs, initialValue }] = useState(
|
||||
() => extractInitial(api, apiDefaultTxSudo, defaultValue)
|
||||
);
|
||||
|
||||
const _onChange = useCallback(
|
||||
({ isValid, value }: RawParam): void => {
|
||||
let proposal = null;
|
||||
|
||||
if (isValid && value) {
|
||||
proposal = api.createType('Proposal', value);
|
||||
}
|
||||
|
||||
onChange && onChange({
|
||||
isValid,
|
||||
value: proposal
|
||||
});
|
||||
},
|
||||
[api, onChange]
|
||||
);
|
||||
|
||||
return (
|
||||
<ExtrinsicDisplay
|
||||
className={className}
|
||||
defaultArgs={initialArgs}
|
||||
defaultValue={initialValue}
|
||||
isDisabled={isDisabled}
|
||||
isError={isError}
|
||||
isPrivate
|
||||
label={label}
|
||||
onChange={_onChange}
|
||||
onEnter={onEnter}
|
||||
onEscape={onEscape}
|
||||
withLabel={withLabel}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default React.memo(ProposalDisplay);
|
||||
@@ -0,0 +1,17 @@
|
||||
// Copyright 2017-2025 @polkadot/app-extrinsics authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { ComponentMap } from '../types.js';
|
||||
|
||||
import Call from './Call.js';
|
||||
import OpaqueCall from './OpaqueCall.js';
|
||||
import Proposal from './Proposal.js';
|
||||
|
||||
const components: ComponentMap = {
|
||||
Call,
|
||||
OpaqueCall,
|
||||
Proposal,
|
||||
RuntimeCall: Call
|
||||
};
|
||||
|
||||
export default components;
|
||||
Reference in New Issue
Block a user