File size: 3,732 Bytes
5da4770 |
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
'use client';
import React, { useState } from 'react';
import { Save, Loader2 } from 'lucide-react';
import { Button } from '@/components/ui/button';
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea';
import { useCreateAgentVersion } from '@/lib/versioning';
import { toast } from 'sonner';
interface CreateVersionButtonProps {
agentId: string;
currentFormData: {
system_prompt: string;
configured_mcps: any[];
custom_mcps: any[];
agentpress_tools: Record<string, any>;
};
hasChanges: boolean;
onVersionCreated?: () => void;
}
export function CreateVersionButton({
agentId,
currentFormData,
hasChanges,
onVersionCreated
}: CreateVersionButtonProps) {
const [showDialog, setShowDialog] = useState(false);
const [versionName, setVersionName] = useState('');
const [description, setDescription] = useState('');
const createVersionMutation = useCreateAgentVersion();
const handleCreateVersion = async () => {
if (!versionName.trim()) {
toast.error('Please provide a version name');
return;
}
try {
await createVersionMutation.mutateAsync({
agentId,
data: {
system_prompt: currentFormData.system_prompt,
configured_mcps: currentFormData.configured_mcps,
custom_mcps: currentFormData.custom_mcps,
agentpress_tools: currentFormData.agentpress_tools,
version_name: versionName.trim(),
description: description.trim() || undefined,
}
});
setShowDialog(false);
setVersionName('');
setDescription('');
if (onVersionCreated) {
onVersionCreated();
}
toast.success('New version created successfully');
} catch (error) {
console.error('Failed to create version:', error);
toast.error('Failed to create version');
}
};
return (
<>
<Dialog open={showDialog} onOpenChange={setShowDialog}>
<DialogContent>
<DialogHeader>
<DialogTitle>Create New Version</DialogTitle>
<DialogDescription>
Save the current agent configuration as a new version. This allows you to preserve different configurations and switch between them.
</DialogDescription>
</DialogHeader>
<div className="space-y-4 py-4">
<div className="space-y-2">
<Label htmlFor="version-name">Version Name</Label>
<Input
id="version-name"
placeholder="e.g., v2, Production Ready, Beta Features"
value={versionName}
onChange={(e) => setVersionName(e.target.value)}
autoFocus
/>
</div>
<div className="space-y-2">
<Label htmlFor="description">Description (Optional)</Label>
<Textarea
id="description"
placeholder="What changes does this version include?"
value={description}
onChange={(e) => setDescription(e.target.value)}
rows={3}
/>
</div>
</div>
<DialogFooter>
<Button
variant="outline"
onClick={() => setShowDialog(false)}
disabled={createVersionMutation.isPending}
>
Cancel
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
</>
);
} |