@@ -1,6 +1,6 @@
1−import React, { useCallback, useEffect } from 'react';
1+import React, { useCallback, useMemo } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3−import { Grid, Text, Input, Flex, ToggleInput } from 'indigo-react';
3+import { Grid, Text, Flex, ToggleInput } from 'indigo-react';
4import * as azimuth from 'azimuth-js';
4import * as azimuth from 'azimuth-js';
6import { useNetwork } from 'store/network';
6import { useNetwork } from 'store/network';
@@ -16,12 +16,18 @@ import * as need from 'lib/need';
16import { useLocalRouter } from 'lib/LocalRouter';
16import { useLocalRouter } from 'lib/LocalRouter';
17import { ETH_ZERO_ADDR, eqAddr, isZeroAddress } from 'lib/wallet';
17import { ETH_ZERO_ADDR, eqAddr, isZeroAddress } from 'lib/wallet';
18import capitalize from 'lib/capitalize';
18import capitalize from 'lib/capitalize';
19−import { useAddressInput, useCheckboxInput } from 'lib/useInputs';
20import useEthereumTransaction from 'lib/useEthereumTransaction';
19import useEthereumTransaction from 'lib/useEthereumTransaction';
22import ViewHeader from 'components/ViewHeader';
21import ViewHeader from 'components/ViewHeader';
23import InlineEthereumTransaction from 'components/InlineEthereumTransaction';
22import InlineEthereumTransaction from 'components/InlineEthereumTransaction';
24import { GAS_LIMITS } from 'lib/constants';
23import { GAS_LIMITS } from 'lib/constants';
26+ buildCheckboxValidator,
27+ buildAddressValidator,
30+import BridgeForm from 'form/BridgeForm';
26const proxyFromDetails = (details, contracts, proxyType) => {
32const proxyFromDetails = (details, contracts, proxyType) => {
27 switch (proxyType) {
33 switch (proxyType) {
@@ -107,41 +113,41 @@ export default function AdminSetProxy() {
108 } = useSetProxy(data.proxyType);
114 } = useSetProxy(data.proxyType);
110− const [unsetInput, { data: isUnsetting }] = useCheckboxInput({
116+ const validateForm = useCallback((values, errors) => {
111− name: 'unset',
117+ if (!values.unset && errors.address) {
112− label: 'Unset',
118+ return errors;
113− inverseLabel: 'Specify',
114− initialValue: false,
115− disabled: inputsLocked,
119− { pass: validAddress, data: address },
120− { reset: resetAddress },
121− ] = useAddressInput({
123− label: `New ${properProxyType} Address`,
124− disabled: inputsLocked || isUnsetting,
131− } else if (validAddress) {
124+ const validate = useMemo(
128+ unset: buildCheckboxValidator(),
138− address,
129+ address: buildAddressValidator(),
140− isUnsetting,
131+ validateForm
136+ const onValues = useCallback(
137+ ({ valid, values, form }) => {
141+ form.change('address', '');
143+ construct(values.address);
142− unconstruct,
146+ unconstruct();
149+ [construct, unconstruct, unset]
146 const proxyAddress = proxyFromDetails(_details, _contracts, data.proxyType);
152 const proxyAddress = proxyFromDetails(_details, _contracts, data.proxyType);
147 const isProxySet = !isZeroAddress(proxyAddress);
153 const isProxySet = !isZeroAddress(proxyAddress);
@@ -169,27 +175,50 @@ export default function AdminSetProxy() {
169 {proxyAddressLabel}
175 {proxyAddressLabel}
170 </Grid.Item>
176 </Grid.Item>
182+ initialValues={{ unset: false }}>
183+ {({ handleSubmit, values }) => (
172− <Grid.Item full as={Flex} row justify="between" align="center">
185+ <Grid.Item full as={Flex} row justify="between" align="center">
173− <Flex.Item
186+ <Flex.Item
175− as={Text}
188+ as={Text}
176− className={cn('mono', {
189+ className={cn('mono', {
177− black: !completed && isProxySet,
190+ black: !completed && isProxySet,
178− gray4: !completed && !isProxySet,
191+ gray4: !completed && !isProxySet,
179− green3: completed,
192+ green3: completed,
181− {isProxySet ? proxyAddress : 'Unset'}
194+ {isProxySet ? proxyAddress : 'Unset'}
182− </Flex.Item>
195+ </Flex.Item>
183− {!completed && isProxySet && (
196+ {!completed && isProxySet && (
184− <Flex.Item as={ToggleInput} {...unsetInput} />
198+ as={ToggleInput}
201+ inverseLabel="Specify"
202+ disabled={inputsLocked}
208+ <Grid.Item full className="mb4" />
215+ label={`New ${properProxyType} Address`}
216+ disabled={inputsLocked || values.unset}
186− </Grid.Item>
221+ </BridgeForm>
189− <Grid.Item full className="mb4" />
191− <Grid.Item full as={Input} {...addressInput} className="mv4" />
194 <Grid.Item
223 <Grid.Item