mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-03 23:02:31 +08:00
feat: add confirmation dialog for diagram history restore (#49)
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user