Commit d966aeca authored by tom's avatar tom

custom value

parent c2397691
...@@ -5,12 +5,12 @@ import { ...@@ -5,12 +5,12 @@ import {
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
Portal, Portal,
IconButton,
Button, Button,
List, List,
ListItem, ListItem,
Icon, Icon,
useDisclosure, useDisclosure,
Input,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
...@@ -20,6 +20,7 @@ import { times } from 'lib/html-entities'; ...@@ -20,6 +20,7 @@ import { times } from 'lib/html-entities';
const ContractMethodFieldZeroes = () => { const ContractMethodFieldZeroes = () => {
const [ selectedOption, setSelectedOption ] = React.useState<number>(); const [ selectedOption, setSelectedOption ] = React.useState<number>();
const [ customValue, setCustomValue ] = React.useState<number>();
const { isOpen, onToggle, onClose } = useDisclosure(); const { isOpen, onToggle, onClose } = useDisclosure();
const handleOptionClick = React.useCallback((event: React.MouseEvent) => { const handleOptionClick = React.useCallback((event: React.MouseEvent) => {
...@@ -30,9 +31,16 @@ const ContractMethodFieldZeroes = () => { ...@@ -30,9 +31,16 @@ const ContractMethodFieldZeroes = () => {
} }
}, [ onClose ]); }, [ onClose ]);
const handleInputChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {
setCustomValue(Number(event.target.value));
setSelectedOption(undefined);
}, []);
const value = selectedOption || customValue;
return ( return (
<> <>
{ selectedOption && ( { Boolean(value) && (
<Button <Button
px={ 1 } px={ 1 }
lineHeight={ 6 } lineHeight={ 6 }
...@@ -47,25 +55,22 @@ const ContractMethodFieldZeroes = () => { ...@@ -47,25 +55,22 @@ const ContractMethodFieldZeroes = () => {
> >
{ times } { times }
<chakra.span>10</chakra.span> <chakra.span>10</chakra.span>
<chakra.span fontSize="xs" lineHeight={ 4 } verticalAlign="super">{ selectedOption }</chakra.span> <chakra.span fontSize="xs" lineHeight={ 4 } verticalAlign="super">{ value }</chakra.span>
</Button> </Button>
) } ) }
<Popover placement="bottom-end" isLazy isOpen={ isOpen } onClose={ onClose }> <Popover placement="bottom-end" isLazy isOpen={ isOpen } onClose={ onClose }>
<PopoverTrigger> <PopoverTrigger>
<div> <Button
<IconButton variant="subtle"
transform={ isOpen ? 'rotate(90deg)' : 'rotate(-90deg)' } colorScheme="gray"
transitionDuration="none" size="xs"
variant="subtle" cursor="pointer"
colorScheme="gray" ml={ 1 }
as={ iconEastMini } p={ 0 }
boxSize={ 6 } onClick={ onToggle }
aria-label="Open menu" >
cursor="pointer" <Icon as={ iconEastMini } transform={ isOpen ? 'rotate(90deg)' : 'rotate(-90deg)' } boxSize={ 6 }/>
ml={ 1 } </Button>
onClick={ onToggle }
/>
</div>
</PopoverTrigger> </PopoverTrigger>
<Portal> <Portal>
<PopoverContent w="110px"> <PopoverContent w="110px">
...@@ -86,6 +91,23 @@ const ContractMethodFieldZeroes = () => { ...@@ -86,6 +91,23 @@ const ContractMethodFieldZeroes = () => {
{ selectedOption === id && <Icon as={ iconCheck } boxSize={ 6 } color="blue.600"/> } { selectedOption === id && <Icon as={ iconCheck } boxSize={ 6 } color="blue.600"/> }
</ListItem> </ListItem>
)) } )) }
<ListItem
py={ 2 }
display="flex"
justifyContent="space-between"
alignItems="center"
>
<span>10*</span>
<Input
type="number"
min={ 0 }
max={ 100 }
ml={ 3 }
size="xs"
onChange={ handleInputChange }
value={ customValue || '' }
/>
</ListItem>
</List> </List>
</PopoverBody> </PopoverBody>
</PopoverContent> </PopoverContent>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment