2024-06-24 22:34:11 +05:30
|
|
|
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
|
2025-01-09 20:09:46 +05:30
|
|
|
import { KeyValuePair } from "./KeyValuePair";
|
2025-01-09 19:46:31 +05:30
|
|
|
import { AddButton } from "../ui/buttons/AddButton";
|
|
|
|
|
import { RemoveButton } from "../ui/buttons/RemoveButton";
|
2024-06-24 22:34:11 +05:30
|
|
|
|
|
|
|
|
export const KeyValueForm = forwardRef((props, ref) => {
|
|
|
|
|
const [numberOfPairs, setNumberOfPairs] = React.useState<number>(1);
|
2025-01-09 19:15:48 +05:30
|
|
|
const keyValuePairRefs = useRef<{ getKeyValuePair: () => { key: string, value: string } }[]>([]);
|
2024-06-24 22:34:11 +05:30
|
|
|
|
|
|
|
|
useImperativeHandle(ref, () => ({
|
|
|
|
|
getObject() {
|
|
|
|
|
let reducedObject = {};
|
|
|
|
|
for (let i = 0; i < numberOfPairs; i++) {
|
|
|
|
|
const keyValuePair = keyValuePairRefs.current[i]?.getKeyValuePair();
|
|
|
|
|
if (keyValuePair) {
|
|
|
|
|
reducedObject = {
|
|
|
|
|
...reducedObject,
|
|
|
|
|
[keyValuePair.key]: keyValuePair.value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return reducedObject;
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
{
|
|
|
|
|
new Array(numberOfPairs).fill(1).map((_, index) => {
|
|
|
|
|
return <KeyValuePair keyLabel={`key ${index + 1}`} valueLabel={`value ${index + 1}`} key={`keyValuePair-${index}`}
|
2025-01-09 19:15:48 +05:30
|
|
|
//@ts-ignore
|
|
|
|
|
ref={el => keyValuePairRefs.current[index] = el} />
|
2024-06-24 22:34:11 +05:30
|
|
|
})
|
|
|
|
|
}
|
2025-01-09 19:15:48 +05:30
|
|
|
<AddButton handleClick={() => setNumberOfPairs(numberOfPairs + 1)} hoverEffect={false} />
|
|
|
|
|
<RemoveButton handleClick={() => setNumberOfPairs(numberOfPairs - 1)} />
|
2024-06-24 22:34:11 +05:30
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
});
|