Skip to Content
UIComponentsConfirmButton

ConfirmButton

Description

A button that opens a confirm dialog when clicked.

Parameters

Example

As icon button

Inspect

Source code

/packages/react-ui/ConfirmButton/ConfirmButton.tsx
import { Button, type ButtonProps, IconButton } from "@mui/material"; import { useState } from "react"; import { ConfirmDialog, type ConfirmDialogProps } from "../ConfirmDialog"; /** * The keys of the {@link ConfirmDialog} props that are destructured from shared props. * @public */ export type DialogDestructuredPropKeys = | "header" | "onConfirm" | "message" | "color" | "confirmButtonText"; /** * The props of the {@link ConfirmButton} component. * @public */ export type ConfirmButtonProps = Omit<ButtonProps, "onClick"> & Pick<ConfirmDialogProps, DialogDestructuredPropKeys> & { /** * @defaultValue `false` */ iconButton?: boolean; onConfirm?: () => void; slots?: { // Omit already used props and shared props, re-add color so we can // specify different color for the dialog than the button dialog?: Omit<ConfirmDialogProps, "isOpen" | "onCancel" | DialogDestructuredPropKeys> & { color?: ConfirmDialogProps["color"]; }; }; }; /** * A button that opens a confirm dialog when clicked. * @param props - The props of the component. * @returns The component. * @public */ export function ConfirmButton({ header, message, confirmButtonText, color, iconButton = false, onConfirm, slots, ...rest }: ConfirmButtonProps) { const [open, setOpen] = useState(false); const handleConfirm = () => { setOpen(false); onConfirm?.(); }; return ( <> {iconButton ? ( <IconButton color={color} {...rest} onClick={() => setOpen(true)} /> ) : ( <Button color={color} {...rest} onClick={() => setOpen(true)} /> )} <ConfirmDialog isOpen={open} onConfirm={handleConfirm} onCancel={() => setOpen(false)} header={header} message={message} color={color} confirmButtonText={confirmButtonText} {...(slots?.dialog ?? {})} /> </> ); }
Last updated on