Default values for At/After referenda (#8147)

This commit is contained in:
Jaco 2022-09-20 09:28:27 +03:00 committed by GitHub
parent 7db402867c
commit 715a2fa266
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 11 deletions

View File

@ -7,7 +7,7 @@ import type { PalletReferendaTrackInfo } from '@polkadot/types/lookup';
import type { BN } from '@polkadot/util';
import type { PalletReferenda } from '../types';
import React, { useCallback, useMemo, useState } from 'react';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import styled from 'styled-components';
import { getGovernanceTracks } from '@polkadot/apps-config';
@ -59,8 +59,18 @@ function Submit ({ className = '', members, onClose, palletReferenda, tracks }:
const [trackId, setTrack] = useState<number | undefined>();
const [origin, setOrigin] = useState<RawParam['value'] | null>(null);
const [atAfter, setAtAfter] = useState<RawParam['value'] | null>(null);
const [defaultAtAfter, setDefaultAtAfter] = useState<RawParam[] | null>(null);
const [{ hash, isHashValid }, setHash] = useState<HashState>({ hash: '', isHashValid: false });
useEffect((): void => {
bestNumber && setDefaultAtAfter((prev) =>
prev || [{
isValid: true,
value: { After: bestNumber.addn(1000) }
}]
);
}, [api, bestNumber]);
const originParam = useMemo(
() => trackId !== undefined && getOrigin(api, specName, palletReferenda, tracks, trackId),
[api, palletReferenda, specName, trackId, tracks]
@ -78,9 +88,11 @@ function Submit ({ className = '', members, onClose, palletReferenda, tracks }:
const [originType, atAfterType] = useMemo(
() => [
[{
name: 'origin',
type: getTypeDef(api.tx[palletReferenda as 'referenda'].submit.meta.args[0].type.toString())
}],
[{
name: 'enact',
type: getTypeDef(api.tx[palletReferenda as 'referenda'].submit.meta.args[2].type.toString())
}]
],
@ -161,14 +173,17 @@ function Submit ({ className = '', members, onClose, palletReferenda, tracks }:
/>
)}
</Modal.Columns>
<Modal.Columns hint={t<string>('The moment of enactment, either at a specific block, or after a specific block. Currently at #{{bestNumber}}, the selected block should be after the current best.', { replace: { bestNumber: formatNumber(bestNumber) } })}>
<Params
className='timeSelect'
isError={isInvalidAt}
onChange={_onChangeAtAfter}
params={atAfterType}
/>
</Modal.Columns>
{bestNumber && defaultAtAfter && (
<Modal.Columns hint={t<string>('The moment of enactment, either at a specific block, or after a specific block. Currently at #{{bestNumber}}, the selected block should be after the current best.', { replace: { bestNumber: formatNumber(bestNumber) } })}>
<Params
className='timeSelect'
isError={isInvalidAt}
onChange={_onChangeAtAfter}
params={atAfterType}
values={defaultAtAfter}
/>
</Modal.Columns>
)}
</Modal.Content>
<Modal.Actions>
<TxButton

View File

@ -8,6 +8,7 @@ import React, { useCallback, useState } from 'react';
import { Dropdown } from '@polkadot/react-components';
import { Enum, getTypeDef } from '@polkadot/types';
import { isObject } from '@polkadot/util';
import Params from '../';
import Bare from './Bare';
@ -51,12 +52,16 @@ function getInitial (defaultValue: RawParam, options: Option[]): Initial {
initialEnum: defaultValue && defaultValue.value
? defaultValue.value instanceof Enum
? defaultValue.value.type
: Object.keys(defaultValue.value as Record<string, unknown>)[0]
: isObject(defaultValue.value)
? Object.keys(defaultValue.value as Record<string, unknown>)[0]
: options[0] && options[0].value
: options[0] && options[0].value,
initialParams: defaultValue && defaultValue.value
? defaultValue.value instanceof Enum
? [{ isValid: true, value: defaultValue.value.inner }]
: undefined
: isObject(defaultValue.value)
? [{ isValid: true, value: (defaultValue.value as Record<string, unknown>)[Object.keys(defaultValue.value as Record<string, unknown>)[0]] }]
: undefined
: undefined
};
}