import React, { useMemo } from 'react'; import get from 'lodash/get'; import cloneDeep from 'lodash/cloneDeep'; import { IconTrash } from '@tabler/icons'; import { useDispatch } from 'react-redux'; import { useTheme } from 'providers/Theme'; import { updateResponseExampleFormUrlEncodedParams } from 'providers/ReduxStore/slices/collections'; import MultiLineEditor from 'components/MultiLineEditor'; import StyledWrapper from './StyledWrapper'; import ReorderTable from 'components/ReorderTable/index'; import Table from 'components/Table-v2'; import Checkbox from 'components/Checkbox'; const ResponseExampleFormUrlEncodedParams = ({ item, collection, exampleUid, editMode = false }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); const params = useMemo(() => { return item.draft ? get(item, 'draft.examples', []).find((e) => e.uid === exampleUid)?.request?.body?.formUrlEncoded || [] : get(item, 'examples', []).find((e) => e.uid === exampleUid)?.request?.body?.formUrlEncoded || []; }, [item, exampleUid]); const addParam = () => { const newParam = { name: '', value: '', enabled: true }; const updatedParams = [...params, newParam]; dispatch(updateResponseExampleFormUrlEncodedParams({ itemUid: item.uid, collectionUid: collection.uid, exampleUid: exampleUid, params: updatedParams })); }; const handleParamChange = (e, _param, type) => { if (!editMode) return; const param = cloneDeep(_param); switch (type) { case 'name': { param.name = e.target.value; break; } case 'value': { param.value = e.target.value; break; } case 'enabled': { param.enabled = e.target.checked; break; } } const updatedParams = params.map((p) => p.uid === param.uid ? param : p); dispatch(updateResponseExampleFormUrlEncodedParams({ itemUid: item.uid, collectionUid: collection.uid, exampleUid: exampleUid, params: updatedParams })); }; const handleRemoveParams = (param) => { const updatedParams = params.filter((p) => p.uid !== param.uid); dispatch(updateResponseExampleFormUrlEncodedParams({ itemUid: item.uid, collectionUid: collection.uid, exampleUid: exampleUid, params: updatedParams })); }; const handleParamDrag = ({ updateReorderedItem }) => { const updatedParams = updateReorderedItem(params); dispatch(updateResponseExampleFormUrlEncodedParams({ itemUid: item.uid, collectionUid: collection.uid, exampleUid: exampleUid, params: updatedParams })); }; if (params.length === 0 && !editMode) { return null; } return ( {params && params.length ? params.map((param, index) => { return ( ); }) : null}
handleParamChange(e, param, 'enabled')} dataTestId={`urlencoded-param-checkbox-${index}`} />
handleParamChange(e, param, 'name') : () => {}} disabled={!editMode} />
{}} onChange={editMode ? (newValue) => handleParamChange({ target: { value: newValue } }, param, 'value') : () => {}} allowNewlines={true} onRun={() => {}} collection={collection} item={item} />
{editMode && (
)}
); }; export default ResponseExampleFormUrlEncodedParams;