mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-18 15:06:58 +01:00
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import { useCallback, useMemo } from 'react';
|
|
import { Editor } from './Editor';
|
|
import type { PairEditorProps } from './PairEditor';
|
|
|
|
type Props = PairEditorProps;
|
|
|
|
export function BulkPairEditor({ pairs, onChange, namePlaceholder, valuePlaceholder }: Props) {
|
|
const pairsText = useMemo(() => {
|
|
return pairs
|
|
.filter((p) => !(p.name.trim() === '' && p.value.trim() === ''))
|
|
.map((p) => `${p.name}: ${p.value}`)
|
|
.join('\n');
|
|
}, [pairs]);
|
|
|
|
const handleChange = useCallback(
|
|
(text: string) => {
|
|
const pairs = text
|
|
.split('\n')
|
|
.filter((l: string) => l.trim())
|
|
.map(lineToPair);
|
|
onChange(pairs);
|
|
},
|
|
[onChange],
|
|
);
|
|
|
|
return (
|
|
<Editor
|
|
useTemplating
|
|
autocompleteVariables
|
|
placeholder={`${namePlaceholder ?? 'name'}: ${valuePlaceholder ?? 'value'}`}
|
|
defaultValue={pairsText}
|
|
contentType="pairs"
|
|
onChange={handleChange}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function lineToPair(l: string): PairEditorProps['pairs'][0] {
|
|
const [name, ...values] = l.split(':');
|
|
const pair: PairEditorProps['pairs'][0] = {
|
|
name: (name ?? '').trim(),
|
|
value: values.join(':').trim(),
|
|
};
|
|
return pair;
|
|
}
|