diff --git a/packages/page-accounts/src/Contacts/modals/Create.tsx b/packages/page-accounts/src/Contacts/modals/Create.tsx index e16b50163d..ddd978ea76 100644 --- a/packages/page-accounts/src/Contacts/modals/Create.tsx +++ b/packages/page-accounts/src/Contacts/modals/Create.tsx @@ -12,10 +12,21 @@ import keyring from '@polkadot/ui-keyring'; import { useTranslation } from '../../translate'; +interface AddrState { + address: string; + isAddressExisting: boolean; + isAddressValid: boolean; +} + +interface NameState { + isNameValid: boolean; + name: string; +} + function Create ({ onClose, onStatusChange }: Props): React.ReactElement { const { t } = useTranslation(); - const [{ isNameValid, name }, setName] = useState<{ isNameValid: boolean; name: string }>({ isNameValid: false, name: '' }); - const [{ address, isAddressExisting, isAddressValid }, setAddress] = useState<{ address: string; isAddressExisting: boolean; isAddressValid: boolean }>({ address: '', isAddressExisting: false, isAddressValid: false }); + const [{ isNameValid, name }, setName] = useState({ isNameValid: false, name: '' }); + const [{ address, isAddressExisting, isAddressValid }, setAddress] = useState({ address: '', isAddressExisting: false, isAddressValid: false }); const isValid = isAddressValid && isNameValid; const _onChangeAddress = useCallback( diff --git a/packages/page-council/src/Motions/ProposeExternal.tsx b/packages/page-council/src/Motions/ProposeExternal.tsx index 2bc4cb7f39..1e8f1a1885 100644 --- a/packages/page-council/src/Motions/ProposeExternal.tsx +++ b/packages/page-council/src/Motions/ProposeExternal.tsx @@ -17,13 +17,18 @@ interface Props { members: string[]; } +interface HashState { + hash?: string; + isHashValid: boolean; +} + function ProposeExternal ({ className = '', isMember, members }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const [isVisible, toggleVisible] = useToggle(); const [accountId, setAcountId] = useState(null); const [proposal, setProposal] = useState | null>(null); - const [{ hash, isHashValid }, setHash] = useState<{ hash?: string; isHashValid: boolean }>({ hash: '', isHashValid: false }); + const [{ hash, isHashValid }, setHash] = useState({ hash: '', isHashValid: false }); const threshold = Math.ceil((members.length || 0) * 0.5); const _onChangeHash = useCallback( diff --git a/packages/page-democracy/src/Overview/PreImage.tsx b/packages/page-democracy/src/Overview/PreImage.tsx index 7923f82c95..83afd262f3 100644 --- a/packages/page-democracy/src/Overview/PreImage.tsx +++ b/packages/page-democracy/src/Overview/PreImage.tsx @@ -21,6 +21,11 @@ interface Props { onClose: () => void; } +interface HashState { + encodedHash: string; + encodedProposal: string; +} + const ZERO_HASH = blake2AsHex(''); function PreImage ({ className = '', imageHash, isImminent: propsIsImminent, onClose }: Props): React.ReactElement { @@ -28,7 +33,7 @@ function PreImage ({ className = '', imageHash, isImminent: propsIsImminent, onC const { apiDefaultTxSudo } = useApi(); const [accountId, setAccountId] = useState(null); const [isImminent, setIsImminent] = useState(propsIsImminent || false); - const [{ encodedHash, encodedProposal }, setHash] = useState<{ encodedHash: string; encodedProposal: string }>({ encodedHash: ZERO_HASH, encodedProposal: '' }); + const [{ encodedHash, encodedProposal }, setHash] = useState({ encodedHash: ZERO_HASH, encodedProposal: '' }); const [proposal, setProposal] = useState(); useEffect((): void => { diff --git a/packages/page-democracy/src/Overview/Propose.tsx b/packages/page-democracy/src/Overview/Propose.tsx index c9a8315650..d2f620ee55 100644 --- a/packages/page-democracy/src/Overview/Propose.tsx +++ b/packages/page-democracy/src/Overview/Propose.tsx @@ -16,12 +16,17 @@ interface Props { onClose: () => void; } +interface HashState { + hash?: string; + isHashValid: boolean; +} + function Propose ({ className = '', onClose }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const [accountId, setAccountId] = useState(null); const [balance, setBalance] = useState(); - const [{ hash, isHashValid }, setHash] = useState<{ hash?: string; isHashValid: boolean }>({ hash: '', isHashValid: false }); + const [{ hash, isHashValid }, setHash] = useState({ hash: '', isHashValid: false }); const _onChangeHash = useCallback( (hash?: string): void => setHash({ hash, isHashValid: isHex(hash, 256) }), diff --git a/packages/page-democracy/src/Overview/TreasuryCell.tsx b/packages/page-democracy/src/Overview/TreasuryCell.tsx index 52890ffcdf..602049aaa5 100644 --- a/packages/page-democracy/src/Overview/TreasuryCell.tsx +++ b/packages/page-democracy/src/Overview/TreasuryCell.tsx @@ -25,13 +25,18 @@ interface Value { value: TreasuryProposal; } +interface ParamState { + params: Param[]; + values: Value[]; +} + function TreasuryCell ({ className = '', value }: Props): React.ReactElement | null { const { api } = useApi(); const [proposalId] = useState(value.unwrap()); const proposal = useCall(api.query.treasury.proposals, [proposalId], { transform: (optProp: Option) => optProp.unwrapOr(null) }); - const [{ params, values }, setExtracted] = useState<{ params: Param[]; values: Value[] }>({ params: [], values: [] }); + const [{ params, values }, setExtracted] = useState({ params: [], values: [] }); useEffect((): void => { proposal && setExtracted({ diff --git a/packages/page-staking/src/Actions/Account/InputValidationController.tsx b/packages/page-staking/src/Actions/Account/InputValidationController.tsx index 0abbf7b154..ec0844286e 100644 --- a/packages/page-staking/src/Actions/Account/InputValidationController.tsx +++ b/packages/page-staking/src/Actions/Account/InputValidationController.tsx @@ -18,6 +18,11 @@ interface Props { onError: (error: string | null, isFatal: boolean) => void; } +interface ErrorState { + error: string | null; + isFatal: boolean; +} + function ValidateController ({ accountId, controllerId, defaultController, onError }: Props): React.ReactElement | null { const { t } = useTranslation(); const { api } = useApi(); @@ -33,7 +38,7 @@ function ValidateController ({ accountId, controllerId, defaultController, onErr ? value.unwrap().stash.toString() : null }); - const [{ error, isFatal }, setError] = useState<{ error: string | null; isFatal: boolean }>({ error: null, isFatal: false }); + const [{ error, isFatal }, setError] = useState({ error: null, isFatal: false }); useEffect((): void => { // don't show an error if the selected controller is the default diff --git a/packages/page-staking/src/Targets/Nominate.tsx b/packages/page-staking/src/Targets/Nominate.tsx index 15b4ce1c3e..4c51e9f5e2 100644 --- a/packages/page-staking/src/Targets/Nominate.tsx +++ b/packages/page-staking/src/Targets/Nominate.tsx @@ -17,9 +17,14 @@ interface Props { targets: string[]; } +interface IdState { + controllerId?: string | null; + stashId: string; +} + function Nominate ({ className = '', ownNominators, targets }: Props): React.ReactElement { const { t } = useTranslation(); - const [ids, setIds] = useState<{ controllerId?: string | null; stashId: string } | null>(null); + const [ids, setIds] = useState(null); const [filter, setFilter] = useState([]); const [isOpen, toggleOpen] = useToggle(); diff --git a/packages/page-staking/src/Targets/index.tsx b/packages/page-staking/src/Targets/index.tsx index 88411abec3..c6e4d0dc5c 100644 --- a/packages/page-staking/src/Targets/index.tsx +++ b/packages/page-staking/src/Targets/index.tsx @@ -22,6 +22,11 @@ interface Props { targets: SortedTargets; } +interface SortState { + sortBy: TargetSortBy; + sortFromMax: boolean; +} + function sort (sortBy: TargetSortBy, sortFromMax: boolean, validators: ValidatorInfo[]): number[] { return [...Array(validators.length).keys()] .sort((a, b) => @@ -41,7 +46,7 @@ function Targets ({ className = '', ownStashes, targets: { calcWith, lastReward, const ownNominators = useOwnNominators(ownStashes); const [selected, setSelected] = useState([]); const [sorted, setSorted] = useState(); - const [{ sortBy, sortFromMax }, setSortBy] = useState<{ sortBy: TargetSortBy; sortFromMax: boolean }>({ sortBy: 'rankOverall', sortFromMax: true }); + const [{ sortBy, sortFromMax }, setSortBy] = useState({ sortBy: 'rankOverall', sortFromMax: true }); useEffect((): void => { validators && setSorted( diff --git a/packages/page-toolbox/src/Sign.tsx b/packages/page-toolbox/src/Sign.tsx index 79e43dfdd5..230df9a82d 100644 --- a/packages/page-toolbox/src/Sign.tsx +++ b/packages/page-toolbox/src/Sign.tsx @@ -26,17 +26,27 @@ interface AccountState { isInjected: boolean; } +interface DataState { + data: string; + isHexData: boolean; +} + +interface SignerState { + isUsable: boolean; + signer: Signer | null; +} + function Sign ({ className = '' }: Props): React.ReactElement { const { t } = useTranslation(); const [currentPair, setCurrentPair] = useState(keyring.getPairs()[0] || null); - const [{ data, isHexData }, setData] = useState<{ data: string; isHexData: boolean }>({ data: '', isHexData: false }); + const [{ data, isHexData }, setData] = useState({ data: '', isHexData: false }); const [{ isInjected }, setAccountState] = useState({ isExternal: false, isHardware: false, isInjected: false }); const [isLocked, setIsLocked] = useState(false); - const [{ isUsable, signer }, setSigner] = useState<{ isUsable: boolean; signer: Signer | null }>({ isUsable: true, signer: null }); + const [{ isUsable, signer }, setSigner] = useState({ isUsable: true, signer: null }); const [signature, setSignature] = useState(''); const [isUnlockVisible, toggleUnlock] = useToggle(); diff --git a/packages/page-treasury/src/Overview/Voting.tsx b/packages/page-treasury/src/Overview/Voting.tsx index 40a1e87266..21bab3a0a4 100644 --- a/packages/page-treasury/src/Overview/Voting.tsx +++ b/packages/page-treasury/src/Overview/Voting.tsx @@ -12,6 +12,11 @@ import { isBoolean } from '@polkadot/util'; import { useTranslation } from '../translate'; +interface CouncilInfo { + councilHash: Hash | null; + councilId: ProposalIndex | null; +} + interface Props { councilProposals: DeriveCollectiveProposal[]; isDisabled?: boolean; @@ -31,7 +36,7 @@ function Voting ({ councilProposals, isDisabled, members }: Props): React.ReactE const [councilOpts, setCouncilOpts] = useState([]); const [councilOptId, setCouncilOptId] = useState(0); const [accountId, setAccountId] = useState(null); - const [{ councilHash, councilId }, setCouncilInfo] = useState<{ councilHash: Hash | null; councilId: ProposalIndex | null }>({ councilHash: null, councilId: null }); + const [{ councilHash, councilId }, setCouncilInfo] = useState({ councilHash: null, councilId: null }); const [isOpen, toggleOpen] = useToggle(); const [voteValue, setVoteValue] = useState(true); @@ -41,7 +46,7 @@ function Voting ({ councilProposals, isDisabled, members }: Props): React.ReactE useEffect((): void => { const available = councilProposals - .filter(({ votes }) => bestNumber && votes?.end.gt(bestNumber)) + .filter(({ votes }) => bestNumber && votes && (!votes.end || votes.end.gt(bestNumber))) .map(({ proposal: { methodName, sectionName }, votes }): Option => ({ text: `Council #${votes?.index.toNumber() || '-'}: ${sectionName}.${methodName} `, value: votes ? votes?.index.toNumber() : -1 diff --git a/packages/react-components/src/Call.tsx b/packages/react-components/src/Call.tsx index cbf1285b83..706d5b6dc2 100644 --- a/packages/react-components/src/Call.tsx +++ b/packages/react-components/src/Call.tsx @@ -38,9 +38,15 @@ interface Value { value: Codec; } +interface Extracted { + hash: Hash | null; + params: Param[]; + values: Value[]; +} + function Call ({ children, className = '', labelHash, mortality, onError, tip, value, withBorder, withHash }: Props): React.ReactElement { const { t } = useTranslation(); - const [{ hash, params, values }, setExtracted] = useState<{ hash: Hash | null; params: Param[]; values: Value[] }>({ hash: null, params: [], values: [] }); + const [{ hash, params, values }, setExtracted] = useState({ hash: null, params: [], values: [] }); useEffect((): void => { const params = GenericCall.filterOrigin(value.meta).map(({ name, type }): Param => ({ diff --git a/packages/react-components/src/Extrinsic.tsx b/packages/react-components/src/Extrinsic.tsx index c7550ffd3d..7937260efb 100644 --- a/packages/react-components/src/Extrinsic.tsx +++ b/packages/react-components/src/Extrinsic.tsx @@ -27,6 +27,14 @@ interface Props extends BareProps { withLabel?: boolean; } +interface CallState { + fn: SubmittableExtrinsicFunction<'promise'>; + params: { + name: string; + type: TypeDef + }[]; +} + function getParams ({ meta }: SubmittableExtrinsicFunction<'promise'>): { name: string; type: TypeDef }[] { return GenericCall.filterOrigin(meta).map((arg): { name: string; type: TypeDef } => ({ name: arg.name.toString(), @@ -35,7 +43,7 @@ function getParams ({ meta }: SubmittableExtrinsicFunction<'promise'>): { name: } function ExtrinsicDisplay ({ defaultValue, isDisabled, isError, isPrivate, label, onChange, onEnter, onEscape, withLabel }: Props): React.ReactElement { - const [extrinsic, setCall] = useState<{ fn: SubmittableExtrinsicFunction<'promise'>; params: { name: string; type: TypeDef }[] }>({ fn: defaultValue, params: getParams(defaultValue) }); + const [extrinsic, setCall] = useState({ fn: defaultValue, params: getParams(defaultValue) }); const [values, setValues] = useState([]); useEffect((): void => { diff --git a/packages/react-params/src/Param/Enum.tsx b/packages/react-params/src/Param/Enum.tsx index cf11ebcdb3..bb20597e6c 100644 --- a/packages/react-params/src/Param/Enum.tsx +++ b/packages/react-params/src/Param/Enum.tsx @@ -19,11 +19,16 @@ interface Option { value?: string; } +interface Options { + options: Option[]; + subTypes: TypeDef[]; +} + function EnumParam (props: Props): React.ReactElement { const { className = '', defaultValue, isDisabled, isError, label, onChange, overrides, type, withLabel } = props; const [current, setCurrent] = useState(null); const [initialValue, setInitialValue] = useState(null); - const [{ options, subTypes }, setOptions] = useState<{ options: Option[]; subTypes: TypeDef[] }>({ options: [], subTypes: [] }); + const [{ options, subTypes }, setOptions] = useState({ options: [], subTypes: [] }); useEffect((): void => { const rawType = createType(registry, type.type as 'u32').toRawType();