"use client"; import { useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { CredentialType, CredentialScope } from "@/lib/api/credentials"; interface CreateCredentialDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (data: CreateCredentialFormData) => Promise; } export interface CreateCredentialFormData { name: string; provider: string; type: CredentialType; scope: CredentialScope; value: string; description?: string; expiresAt?: string; } const PROVIDERS = [ { value: "github", label: "GitHub" }, { value: "gitlab", label: "GitLab" }, { value: "bitbucket", label: "Bitbucket" }, { value: "openai", label: "OpenAI" }, { value: "custom", label: "Custom" }, ]; export function CreateCredentialDialog({ open, onOpenChange, onSubmit, }: CreateCredentialDialogProps): React.ReactElement { const [formData, setFormData] = useState({ name: "", provider: "custom", type: CredentialType.API_KEY, scope: CredentialScope.USER, value: "", description: "", expiresAt: "", }); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); const handleSubmit = async (e: React.SyntheticEvent): Promise => { e.preventDefault(); setError(null); // Validation if (!formData.name.trim()) { setError("Name is required"); return; } if (!formData.value.trim()) { setError("Value is required"); return; } setIsSubmitting(true); try { await onSubmit(formData); // Reset form on success setFormData({ name: "", provider: "custom", type: CredentialType.API_KEY, scope: CredentialScope.USER, value: "", description: "", expiresAt: "", }); onOpenChange(false); } catch (err) { setError(err instanceof Error ? err.message : "Failed to create credential"); } finally { setIsSubmitting(false); } }; return (
Add Credential Store a new credential securely. All values are encrypted at rest.
{/* Name */}
) => { setFormData({ ...formData, name: e.target.value }); }} placeholder="e.g., GitHub Personal Token" disabled={isSubmitting} />
{/* Provider */}
{/* Type */}
{/* Value */}
) => { setFormData({ ...formData, value: e.target.value }); }} placeholder="Enter credential value" disabled={isSubmitting} />

This value will be encrypted and cannot be viewed in the list

{/* Description */}