Skip to content
25 changes: 23 additions & 2 deletions app/client/src/components/ads/ColorPickerComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ interface ColorPickerProps {

function ColorPickerComponent(props: ColorPickerProps) {
const [color, setColor] = React.useState(props.color);
const [isOpen, setOpen] = React.useState(false);
const debouncedOnChange = React.useCallback(
debounce(props.changeColor, 500),
[props.changeColor],
Expand All @@ -164,6 +165,7 @@ function ColorPickerComponent(props: ColorPickerProps) {
<Popover
enforceFocus={false}
interactionKind={PopoverInteractionKind.CLICK}
isOpen={isOpen}
minimal
modifiers={{
offset: {
Expand All @@ -176,22 +178,41 @@ function ColorPickerComponent(props: ColorPickerProps) {
<StyledInputGroup
leftIcon={
color ? (
<ColorIcon color={color} />
<ColorIcon color={color} onClick={() => setOpen(true)} />
) : (
<NoColorIconWrapper>
<NoColorIconWrapper onClick={() => setOpen(true)}>
<NoColorIcon>
<div className="line" />
</NoColorIcon>
</NoColorIconWrapper>
)
}
onBlur={() => {
// Case 1
// On Tab key press Input loses focus and onKeyUp handler is not called
// To handle Tab key press onBlur event is used instead
// As input will lose focus on Tab press
// Case 2
// if user clicks on ColorBoard blur is called first and color is not updated
Comment thread
vibhandikyash marked this conversation as resolved.
// to prevent that make sure to wait for color update before onBlur
setTimeout(() => {
setOpen(false);
}, 100);
}}
onChange={handleChangeColor}
onFocus={() => setOpen(true)}
onKeyUp={(e) => {
if (e.key === "Enter") {
Comment thread
vibhandikyash marked this conversation as resolved.
setOpen((state) => !state);
}
}}
placeholder="enter color name or hex"
value={color}
/>
<ColorBoard
selectColor={(color) => {
setColor(color);
setOpen(false);
props.changeColor(color);
}}
selectedColor={color}
Expand Down