@@ -1,66 +1,23 @@
1−import React, { useCallback, useEffect, useMemo } from 'react';
2import cn from 'classnames';
1import cn from 'classnames';
3−import { Grid, Flex } from 'indigo-react';
2+import { Box, Text } from '@tlon/indigo-react';
4−import { Just } from 'folktale/maybe';
3+import { AddressButton } from 'components/AddressButton';
6−import * as need from 'lib/need';
7−import useEthereumTransaction from 'lib/useEthereumTransaction';
8−import { pluralize } from 'lib/pluralize';
10−import { useWallet } from 'store/wallet';
11−import { usePointCache } from 'store/pointCache';
12−import { useStarReleaseCache } from 'store/starRelease';
14import InlineEthereumTransaction from 'components/InlineEthereumTransaction';
4import InlineEthereumTransaction from 'components/InlineEthereumTransaction';
15−import { matchBlinky } from 'components/Blinky';
17−import { NumberInput, AddressInput } from 'form/Inputs';
18import BridgeForm from 'form/BridgeForm';
5import BridgeForm from 'form/BridgeForm';
19−import FormError from 'form/FormError';
20−import { composeValidator, buildNumberValidator } from 'form/validators';
21import { convertToNumber } from 'form/formatters';
6import { convertToNumber } from 'form/formatters';
7+import FormError from 'form/FormError';
8+import { AddressInput, NumberInput } from 'form/Inputs';
9+import { buildNumberValidator, composeValidator } from 'form/validators';
10+import { Grid, Flex } from 'indigo-react';
11+import { pluralize } from 'lib/pluralize';
12+import { useCallback, useEffect, useMemo } from 'react';
13+import { useStarReleaseCache } from 'store/starRelease';
14+import { useWithdrawStars } from './useWithdrawStars';
23−function MatchPluralizeStars({ quantity }) {
16+interface WithdrawFormProps {
24− const _quantity = quantity.getOrElse(0);
17+ afterSubmit: VoidFunction;
30− green2: _quantity > 0,
31− red4: Just.hasInstance(quantity) && _quantity === 0,
33− {matchBlinky(quantity)}
35− {pluralize(_quantity, ' star ', ' stars ')}
40−function AddressIndicator({ isOwn, className }) {
42− <div className={cn('green2', className)}>✓ Current Address</div>
44− <div className={cn('red4', className)}>! Different address</div>
48−function useWithdrawStars() {
49− const { syncControlledPoints } = usePointCache();
51− const { syncStarReleaseDetails, withdraw } = useStarReleaseCache();
52− return useEthereumTransaction(
53− useCallback((to, amount) => withdraw(amount, to), [withdraw]),
55− () => Promise.all([syncControlledPoints(), syncStarReleaseDetails()]),
56− [syncStarReleaseDetails, syncControlledPoints]
61−export default function Locked({ className, goActive }) {
20+export const WithdrawForm = ({ afterSubmit }: WithdrawFormProps) => {
62− const { wallet } = useWallet();
63− const address = need.addressFromWallet(wallet);
66 construct,
23 construct,
@@ -101,38 +58,33 @@ export default function Locked({ className, goActive }) {
101 [canWithdraw, inputsLocked]
58 [canWithdraw, inputsLocked]
104− const initialValues = { address };
61+ const initialValues = {};
107− <Grid gap={completed ? 0 : 6} className={cn('mt4', className)} full>
64+ <>
108 <BridgeForm
65 <BridgeForm
109 initialValues={initialValues}
66 initialValues={initialValues}
110 onValues={onValues}
67 onValues={onValues}
111− validate={validate}>
68+ validate={validate}
69+ afterSubmit={afterSubmit}>
112 {({ values, form }) => (
70 {({ values, form }) => (
114 {!completed && (
72 {!completed && (
116− <Grid.Item full className="f5">
74+ <Box className={cn("info-row", { available: canWithdraw.value > 0})}>
117− You have <MatchPluralizeStars quantity={canWithdraw} />
75+ <Text>{`${canWithdraw.value} of ${total.value} available`}</Text>
118− available to withdraw
76+ </Box>
119− <br />
77+ <Box className="info-row">
120− You have
78+ <Text>{`${total.value -
121− <MatchPluralizeStars quantity={total} />
79+ canWithdraw.value} are in lockup`}</Text>
124 <Grid.Item
81 <Grid.Item
125 cols={[1, 4]}
82 cols={[1, 4]}
126 label="Stars"
83 label="Stars"
127 as={NumberInput}
84 as={NumberInput}
128− placeholder="#"
85+ placeholder="0"
129 name="numStars"
86 name="numStars"
130 disabled={inputsLocked}
87 disabled={inputsLocked}
132− <div className="flex-center h-full">
133− / {matchBlinky(canWithdraw)}
137 <Grid.Item full className="f5" cols={[1, 13]} as={Flex} col>
89 <Grid.Item full className="f5" cols={[1, 13]} as={Flex} col>
138 <Flex.Item
90 <Flex.Item
@@ -141,10 +93,11 @@ export default function Locked({ className, goActive }) {
141 label="Withdraw To"
93 label="Withdraw To"
142 disabled={inputsLocked}
94 disabled={inputsLocked}
145− as={AddressIndicator}
97+ <AddressButton inputName="address">
146− isOwn={address === values.address}
98+ Use my address
147− />
99+ </AddressButton>
148 </Grid.Item>
101 </Grid.Item>
@@ -173,6 +126,6 @@ export default function Locked({ className, goActive }) {
175 </BridgeForm>
128 </BridgeForm>