diff --git a/src/components/organisms/BrowserWindow.tsx b/src/components/organisms/BrowserWindow.tsx index 11ae4320..f848f28a 100644 --- a/src/components/organisms/BrowserWindow.tsx +++ b/src/components/organisms/BrowserWindow.tsx @@ -228,13 +228,13 @@ export const BrowserWindow = () => { setFields(prevFields => { const updatedFields = { ...prevFields, - [newField.label]: newField + [newField.id]: newField }; return updatedFields; }); if (listSelector) { - addListStep(listSelector, { ...fields, [newField.label]: newField }, currentListId, { type: '', selector: paginationSelector }); + addListStep(listSelector, { ...fields, [newField.id]: newField }, currentListId, { type: '', selector: paginationSelector }); } } else { @@ -287,13 +287,13 @@ export const BrowserWindow = () => { setFields(prevFields => { const updatedFields = { ...prevFields, - [newField.label]: newField + [newField.id]: newField }; return updatedFields; }); if (listSelector) { - addListStep(listSelector, { ...fields, [newField.label]: newField }, currentListId, { type: '', selector: paginationSelector }); + addListStep(listSelector, { ...fields, [newField.id]: newField }, currentListId, { type: '', selector: paginationSelector }); } } } diff --git a/src/components/organisms/RightSidePanel.tsx b/src/components/organisms/RightSidePanel.tsx index 0cf0cb90..6938e090 100644 --- a/src/components/organisms/RightSidePanel.tsx +++ b/src/components/organisms/RightSidePanel.tsx @@ -132,42 +132,40 @@ export const RightSidePanel: React.FC = ({ onFinishCapture onFinishCapture(); }, [stopGetText, getTextSettingsObject, socket, browserSteps, confirmedTextSteps]); - const getListSettingsObject = useCallback(() => { let settings: { listSelector?: string; - fields?: Record; + fields?: Record; pagination?: { type: string; selector?: string }; limit?: number; } = {}; - + browserSteps.forEach(step => { if (step.type === 'list' && step.listSelector && Object.keys(step.fields).length > 0) { - const fields: Record = {}; - Object.entries(step.fields).forEach(([label, field]) => { + const fields: Record = {}; + + Object.entries(step.fields).forEach(([id, field]) => { if (field.selectorObj?.selector) { - fields[label] = { + fields[field.label] = { selector: field.selectorObj.selector, tag: field.selectorObj.tag, attribute: field.selectorObj.attribute, }; } }); - + settings = { listSelector: step.listSelector, fields: fields, pagination: { type: paginationType, selector: step.pagination?.selector }, limit: parseInt(limitType === 'custom' ? customLimit : limitType), }; - } }); - + return settings; }, [browserSteps, paginationType, limitType, customLimit]); - - + const resetListState = useCallback(() => { setShowPaginationOptions(false); updatePaginationType(''); diff --git a/src/context/browserSteps.tsx b/src/context/browserSteps.tsx index 4af37df0..7630f559 100644 --- a/src/context/browserSteps.tsx +++ b/src/context/browserSteps.tsx @@ -61,13 +61,11 @@ export const BrowserStepsProvider: React.FC<{ children: React.ReactNode }> = ({ const addListStep = (listSelector: string, newFields: { [key: string]: TextStep }, listId: number, pagination?: { type: string; selector: string }, limit?: number) => { setBrowserSteps(prevSteps => { - const existingListStepIndex = prevSteps.findIndex( - step => step.type === 'list' && step.id === listId - ); + const existingListStepIndex = prevSteps.findIndex(step => step.type === 'list' && step.id === listId); if (existingListStepIndex !== -1) { - // Update the existing ListStep with new fields, excluding discarded ones const updatedSteps = [...prevSteps]; const existingListStep = updatedSteps[existingListStepIndex] as ListStep; + const filteredNewFields = Object.entries(newFields).reduce((acc, [key, value]) => { if (!discardedFields.has(`${listId}-${key}`)) { acc[key] = value; @@ -91,7 +89,7 @@ export const BrowserStepsProvider: React.FC<{ children: React.ReactNode }> = ({ } }); }; - + const addScreenshotStep = (fullPage: boolean) => { setBrowserSteps(prevSteps => [ ...prevSteps, @@ -115,15 +113,18 @@ export const BrowserStepsProvider: React.FC<{ children: React.ReactNode }> = ({ setBrowserSteps(prevSteps => prevSteps.map(step => { if (step.type === 'list' && step.id === listId) { + // Ensure deep copy of the fields object + const updatedFields = { + ...step.fields, + [fieldKey]: { + ...step.fields[fieldKey], + label: newLabel + } + }; + return { ...step, - fields: { - ...step.fields, - [fieldKey]: { - ...step.fields[fieldKey], - label: newLabel - } - } + fields: updatedFields }; } return step;