feat: add confirmation dialog for diagram history restore (#49)

This commit is contained in:
Dayuan Jiang
2025-12-03 14:04:29 +09:00
committed by GitHub
parent 443a937370
commit c458947553

View File

@@ -1,5 +1,6 @@
"use client"; "use client";
import { useState } from "react";
import { import {
Dialog, Dialog,
DialogContent, DialogContent,
@@ -22,6 +23,19 @@ export function HistoryDialog({
onToggleHistory, onToggleHistory,
}: HistoryDialogProps) { }: HistoryDialogProps) {
const { loadDiagram: onDisplayChart, diagramHistory } = useDiagram(); const { loadDiagram: onDisplayChart, diagramHistory } = useDiagram();
const [selectedIndex, setSelectedIndex] = useState<number | null>(null);
const handleClose = () => {
setSelectedIndex(null);
onToggleHistory(false);
};
const handleConfirmRestore = () => {
if (selectedIndex !== null) {
onDisplayChart(diagramHistory[selectedIndex].xml);
handleClose();
}
};
return ( return (
<Dialog open={showHistory} onOpenChange={onToggleHistory}> <Dialog open={showHistory} onOpenChange={onToggleHistory}>
@@ -45,11 +59,12 @@ export function HistoryDialog({
{diagramHistory.map((item, index) => ( {diagramHistory.map((item, index) => (
<div <div
key={index} key={index}
className="border rounded-md p-2 cursor-pointer hover:border-primary transition-colors" className={`border rounded-md p-2 cursor-pointer hover:border-primary transition-colors ${
onClick={() => { selectedIndex === index
onDisplayChart(item.xml); ? "border-primary ring-2 ring-primary"
onToggleHistory(false); : ""
}} }`}
onClick={() => setSelectedIndex(index)}
> >
<div className="aspect-video bg-white rounded overflow-hidden flex items-center justify-center"> <div className="aspect-video bg-white rounded overflow-hidden flex items-center justify-center">
<Image <Image
@@ -69,12 +84,29 @@ export function HistoryDialog({
)} )}
<DialogFooter> <DialogFooter>
{selectedIndex !== null ? (
<>
<div className="flex-1 text-sm text-muted-foreground">
Restore to Version {selectedIndex + 1}?
</div>
<Button <Button
variant="outline" variant="outline"
onClick={() => onToggleHistory(false)} onClick={() => setSelectedIndex(null)}
>
Cancel
</Button>
<Button onClick={handleConfirmRestore}>
Confirm
</Button>
</>
) : (
<Button
variant="outline"
onClick={handleClose}
> >
Close Close
</Button> </Button>
)}
</DialogFooter> </DialogFooter>
</DialogContent> </DialogContent>
</Dialog> </Dialog>