"use client"; import React, { useState, useEffect } from "react"; import { Plus, Trash2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; interface HeadersManagerProps { headers: Record; onChange: (headers: Record) => void; } interface HeaderItem { key: string; value: string; } export function HeadersManager({ headers, onChange }: HeadersManagerProps) { const [headersList, setHeadersList] = useState([]); // 초기 헤더 로드 useEffect(() => { const list = Object.entries(headers || {}).map(([key, value]) => ({ key, value, })); // 헤더가 없으면 기본 헤더 추가 if (list.length === 0) { list.push({ key: "Content-Type", value: "application/json" }); } setHeadersList(list); }, []); // 헤더 추가 const addHeader = () => { setHeadersList([...headersList, { key: "", value: "" }]); }; // 헤더 삭제 const removeHeader = (index: number) => { const newList = headersList.filter((_, i) => i !== index); setHeadersList(newList); updateParent(newList); }; // 헤더 업데이트 const updateHeader = (index: number, field: "key" | "value", value: string) => { const newList = [...headersList]; newList[index][field] = value; setHeadersList(newList); updateParent(newList); }; // 부모 컴포넌트에 변경사항 전달 const updateParent = (list: HeaderItem[]) => { const headersObject = list.reduce( (acc, { key, value }) => { if (key.trim()) { acc[key] = value; } return acc; }, {} as Record, ); onChange(headersObject); }; return (
{headersList.length > 0 ? (
작업 {headersList.map((header, index) => ( updateHeader(index, "key", e.target.value)} placeholder="예: Authorization" className="h-8" /> updateHeader(index, "value", e.target.value)} placeholder="예: Bearer token123" className="h-8" /> ))}
) : (
헤더가 없습니다. 헤더 추가 버튼을 클릭하여 추가하세요.
)}

* 공통으로 사용할 HTTP 헤더를 설정합니다. 인증 헤더는 별도의 인증 설정에서 관리됩니다.

); }