import { useEffect, useState } from "react"; import { Plus, Trash2 } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { Button } from "./components/ui/button"; import { Input } from "./components/ui/input"; import Logo from "./Logo"; import usePluginSettings from "./utils/settings"; export default function CustomHeadersPage() { const navigate = useNavigate(); const { settings, setSettings } = usePluginSettings(); // Convert headers object to array of entries for easier manipulation const [headers, setHeaders] = useState<{ key: string; value: string }[]>([]); const [newHeaderKey, setNewHeaderKey] = useState(""); const [newHeaderValue, setNewHeaderValue] = useState(""); // Update headers when settings change (e.g., when loaded from storage) useEffect(() => { setHeaders( Object.entries(settings.customHeaders || {}).map(([key, value]) => ({ key, value, })), ); }, [settings.customHeaders]); const handleAddHeader = () => { if (!newHeaderKey.trim() || !newHeaderValue.trim()) { return; } // Check if header already exists const existingIndex = headers.findIndex((h) => h.key === newHeaderKey); if (existingIndex >= 0) { // Update existing header const updatedHeaders = [...headers]; updatedHeaders[existingIndex].value = newHeaderValue; setHeaders(updatedHeaders); } else { // Add new header setHeaders([...headers, { key: newHeaderKey, value: newHeaderValue }]); } setNewHeaderKey(""); setNewHeaderValue(""); }; const handleRemoveHeader = (index: number) => { setHeaders(headers.filter((_, i) => i !== index)); }; const handleSave = () => { // Convert array back to object const headersObject = headers.reduce( (acc, { key, value }) => { if (key.trim() && value.trim()) { acc[key] = value; } return acc; }, {} as Record, ); setSettings((s) => ({ ...s, customHeaders: headersObject })); navigate(-1); }; const handleCancel = () => { navigate(-1); }; return (
Custom Headers

Add custom HTTP headers that will be sent with every API request.


{/* Existing Headers List */}
{headers.length === 0 ? (

No custom headers configured

) : ( headers.map((header, index) => (

{header.key}

{header.value}

)) )}

{/* Add New Header */}

Add New Header

setNewHeaderKey(e.target.value)} autoCapitalize="none" /> setNewHeaderValue(e.target.value)} autoCapitalize="none" />

{/* Action Buttons */}
); }