import { useCallback, useMemo } from "react"; import { generateId } from "../../lib/generateId"; import { Editor } from "./Editor/LazyEditor"; import type { Pair, PairEditorProps, PairWithId } from "./PairEditor"; type Props = PairEditorProps; export function BulkPairEditor({ pairs, onChange, namePlaceholder, valuePlaceholder, forceUpdateKey, forcedEnvironmentId, stateKey, }: Props) { const pairsText = useMemo(() => { return pairs .filter((p) => !(p.name.trim() === "" && p.value.trim() === "")) .map(pairToLine) .join("\n"); }, [pairs]); const handleChange = useCallback( (text: string) => { const pairs = text .split("\n") .filter((l: string) => l.trim()) .map(lineToPair); onChange(pairs); }, [onChange], ); return ( ); } function pairToLine(pair: Pair) { const value = pair.value.replaceAll("\n", "\\n"); return `${pair.name}: ${value}`; } function lineToPair(line: string): PairWithId { const [, name, value] = line.match(/^(:?[^:]+):\s+(.*)$/) ?? []; return { enabled: true, name: (name ?? "").trim(), value: (value ?? "").replaceAll("\\n", "\n").trim(), id: generateId(), }; }