omnivore/packages/web/components/patterns/ConfirmationModal.tsx

64 lines
1.9 KiB
TypeScript
Raw Normal View History

2022-02-11 17:24:33 +00:00
import {
ModalRoot,
ModalContent,
ModalOverlay,
} from '../elements/ModalPrimitives'
import { VStack, HStack } from '../elements/LayoutPrimitives'
import { Button } from '../elements/Button'
import { StyledText } from '../elements/StyledText'
type ConfirmationModalProps = {
message?: string
richMessage?: React.ReactNode
2022-02-11 17:24:33 +00:00
icon?: React.ReactNode
acceptButtonLabel?: string
2023-01-18 10:01:34 +00:00
cancelButtonLabel?: string
2022-02-11 17:24:33 +00:00
onAccept: () => void
onOpenChange: (open: boolean) => void
}
export function ConfirmationModal(props: ConfirmationModalProps): JSX.Element {
return (
<ModalRoot defaultOpen onOpenChange={props.onOpenChange}>
2022-02-11 17:24:33 +00:00
<ModalOverlay />
<ModalContent css={{ bg: '$grayBg', maxWidth: '20em', zIndex: '20' }}>
2023-06-09 10:03:38 +00:00
<VStack alignment="center" distribution="center" css={{ p: '15px' }}>
2022-02-11 17:24:33 +00:00
{props.icon ? props.icon : null}
{props.richMessage ? (
props.richMessage
) : (
<StyledText>{props.message}</StyledText>
)}
2022-02-11 17:24:33 +00:00
<HStack distribution="center" css={{ pt: '$2' }}>
<Button
style="ctaOutlineYellow"
2022-02-11 17:24:33 +00:00
css={{ mr: '$2' }}
onClick={() => props.onOpenChange(false)}
onKeyDown={(event) => {
if (event.key === 'Enter') {
event.preventDefault()
props.onOpenChange(false)
}
}}
2022-02-11 17:24:33 +00:00
>
2023-01-18 10:01:34 +00:00
{props.cancelButtonLabel ? props.cancelButtonLabel : 'Cancel'}
2022-02-11 17:24:33 +00:00
</Button>
<Button
style="ctaDarkYellow"
onClick={props.onAccept}
onKeyDown={(event) => {
if (event.key === 'Enter') {
event.preventDefault()
props.onAccept()
}
}}
>
2022-02-11 17:24:33 +00:00
{props.acceptButtonLabel ?? 'Confirm'}
</Button>
</HStack>
</VStack>
</ModalContent>
</ModalRoot>
)
}