#
vincentlu
2026-01-10 89ca1eb19972e8f5e0baccbaffcfa7fbb2ae85c3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@mui/material';
import {
    useTranslate
} from 'react-admin';
 
const ConfirmButton = (props) => {
    const { label, onConfirm, renderButton, ...rest } = props;
    const translate = useTranslate();
    const buttonRef = useRef(null);
    const [open, setOpen] = useState(false);
 
    const handleClickOpen = (event) => {
        event.stopPropagation();
        setOpen(true);
    };
 
    const handleClose = (event) => {
        event.stopPropagation();
        setOpen(false);
    };
 
    const handleConfirm = (event) => {
        handleClose(event);
        onConfirm();
    };
 
    const buttonElement = renderButton
        ? renderButton({
            buttonProps: {
                ref: buttonRef,
                onClick: handleClickOpen,
                'aria-label': translate(label),
                ...rest,
            },
            label,
            translate,
        })
        : (
            <Button
                ref={buttonRef}
                onClick={handleClickOpen}
                aria-label={translate(label)}
                {...rest}
            >
                {translate(label)}
            </Button>
        );
 
    return (
        <>
            {buttonElement}
            <Dialog
                aria-labelledby="dialog-title"
                aria-describedby="dialog-description"
                open={open}
                onClose={handleClose}
            >
                <DialogTitle>{translate('common.msg.confirm.tip')}</DialogTitle>
                <DialogContent>
                    <DialogContentText>
                        {translate('common.msg.confirm.desc')}
                    </DialogContentText>
                </DialogContent>
                <DialogActions>
                    <Button onClick={handleClose} color="primary">
                        {translate('ra.action.cancel')}
                    </Button>
                    <Button onClick={handleConfirm} color="primary">
                        {translate('ra.action.confirm')}
                    </Button>
                </DialogActions>
            </Dialog>
        </>
    )
}
 
export default ConfirmButton;