Skip to content

Instantly share code, notes, and snippets.

@kelkes
Created March 9, 2022 20:37
Show Gist options
  • Save kelkes/b4ad192a53fd03ddffed14e87eef7085 to your computer and use it in GitHub Desktop.
Save kelkes/b4ad192a53fd03ddffed14e87eef7085 to your computer and use it in GitHub Desktop.
ConfirmIconButton
import React, {useCallback} from 'react';
import {
Popover,
PopoverTrigger,
PopoverContent,
PopoverHeader,
PopoverBody,
PopoverFooter,
PopoverArrow,
PopoverCloseButton,
IconButton,
IconButtonProps,
ButtonGroup,
Button,
Portal,
useBoolean,
} from '@chakra-ui/react';
export const ConfirmIconButton = ({onClick, ...props}: IconButtonProps) => {
const [flag, {off, toggle}] = useBoolean();
const handleOkClick = useCallback(
(e) => {
off();
if (onClick) {
onClick(e);
}
},
[off, onClick]
);
return (
<Popover isLazy isOpen={flag} onClose={off}>
<PopoverTrigger>
<IconButton onClick={toggle} {...props} />
</PopoverTrigger>
<Portal>
<PopoverContent>
<PopoverArrow />
<PopoverHeader fontWeight="semibold">
Bestätigung
</PopoverHeader>
<PopoverCloseButton />
<PopoverBody>
Bist Du sicher, dass Du mit der Aktion fortfahren
willst?
</PopoverBody>
<PopoverFooter d="flex" justifyContent="flex-end">
<ButtonGroup size="sm">
<Button variant="ghost" onClick={off}>
Abbrechen
</Button>
<Button colorScheme="blue" onClick={handleOkClick}>
Ja
</Button>
</ButtonGroup>
</PopoverFooter>
</PopoverContent>
</Portal>
</Popover>
);
};
@kelkes
Copy link
Author

kelkes commented Mar 9, 2022

Example usage:

<ConfirmIconButton
    icon={<HiCheckCircle fontSize="1.25rem" />}
    variant="ghost"
    onClick={doSomethingVeryImportant}
    aria-label="Anfrage bestätigen"
/>

2022-03-09_21-40

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment