Merge pull request #37 from amhsirak/develop
feat: ensure label changes reflect in list step
This commit is contained in:
@@ -228,13 +228,13 @@ export const BrowserWindow = () => {
|
|||||||
setFields(prevFields => {
|
setFields(prevFields => {
|
||||||
const updatedFields = {
|
const updatedFields = {
|
||||||
...prevFields,
|
...prevFields,
|
||||||
[newField.label]: newField
|
[newField.id]: newField
|
||||||
};
|
};
|
||||||
return updatedFields;
|
return updatedFields;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (listSelector) {
|
if (listSelector) {
|
||||||
addListStep(listSelector, { ...fields, [newField.label]: newField }, currentListId, { type: '', selector: paginationSelector });
|
addListStep(listSelector, { ...fields, [newField.id]: newField }, currentListId, { type: '', selector: paginationSelector });
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -287,13 +287,13 @@ export const BrowserWindow = () => {
|
|||||||
setFields(prevFields => {
|
setFields(prevFields => {
|
||||||
const updatedFields = {
|
const updatedFields = {
|
||||||
...prevFields,
|
...prevFields,
|
||||||
[newField.label]: newField
|
[newField.id]: newField
|
||||||
};
|
};
|
||||||
return updatedFields;
|
return updatedFields;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (listSelector) {
|
if (listSelector) {
|
||||||
addListStep(listSelector, { ...fields, [newField.label]: newField }, currentListId, { type: '', selector: paginationSelector });
|
addListStep(listSelector, { ...fields, [newField.id]: newField }, currentListId, { type: '', selector: paginationSelector });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,42 +132,40 @@ export const RightSidePanel: React.FC<RightSidePanelProps> = ({ onFinishCapture
|
|||||||
onFinishCapture();
|
onFinishCapture();
|
||||||
}, [stopGetText, getTextSettingsObject, socket, browserSteps, confirmedTextSteps]);
|
}, [stopGetText, getTextSettingsObject, socket, browserSteps, confirmedTextSteps]);
|
||||||
|
|
||||||
|
|
||||||
const getListSettingsObject = useCallback(() => {
|
const getListSettingsObject = useCallback(() => {
|
||||||
let settings: {
|
let settings: {
|
||||||
listSelector?: string;
|
listSelector?: string;
|
||||||
fields?: Record<string, { selector: string; tag?: string;[key: string]: any }>;
|
fields?: Record<string, { selector: string; tag?: string; [key: string]: any }>;
|
||||||
pagination?: { type: string; selector?: string };
|
pagination?: { type: string; selector?: string };
|
||||||
limit?: number;
|
limit?: number;
|
||||||
} = {};
|
} = {};
|
||||||
|
|
||||||
browserSteps.forEach(step => {
|
browserSteps.forEach(step => {
|
||||||
if (step.type === 'list' && step.listSelector && Object.keys(step.fields).length > 0) {
|
if (step.type === 'list' && step.listSelector && Object.keys(step.fields).length > 0) {
|
||||||
const fields: Record<string, { selector: string; tag?: string;[key: string]: any }> = {};
|
const fields: Record<string, { selector: string; tag?: string; [key: string]: any }> = {};
|
||||||
Object.entries(step.fields).forEach(([label, field]) => {
|
|
||||||
|
Object.entries(step.fields).forEach(([id, field]) => {
|
||||||
if (field.selectorObj?.selector) {
|
if (field.selectorObj?.selector) {
|
||||||
fields[label] = {
|
fields[field.label] = {
|
||||||
selector: field.selectorObj.selector,
|
selector: field.selectorObj.selector,
|
||||||
tag: field.selectorObj.tag,
|
tag: field.selectorObj.tag,
|
||||||
attribute: field.selectorObj.attribute,
|
attribute: field.selectorObj.attribute,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
listSelector: step.listSelector,
|
listSelector: step.listSelector,
|
||||||
fields: fields,
|
fields: fields,
|
||||||
pagination: { type: paginationType, selector: step.pagination?.selector },
|
pagination: { type: paginationType, selector: step.pagination?.selector },
|
||||||
limit: parseInt(limitType === 'custom' ? customLimit : limitType),
|
limit: parseInt(limitType === 'custom' ? customLimit : limitType),
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}, [browserSteps, paginationType, limitType, customLimit]);
|
}, [browserSteps, paginationType, limitType, customLimit]);
|
||||||
|
|
||||||
|
|
||||||
const resetListState = useCallback(() => {
|
const resetListState = useCallback(() => {
|
||||||
setShowPaginationOptions(false);
|
setShowPaginationOptions(false);
|
||||||
updatePaginationType('');
|
updatePaginationType('');
|
||||||
|
|||||||
@@ -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) => {
|
const addListStep = (listSelector: string, newFields: { [key: string]: TextStep }, listId: number, pagination?: { type: string; selector: string }, limit?: number) => {
|
||||||
setBrowserSteps(prevSteps => {
|
setBrowserSteps(prevSteps => {
|
||||||
const existingListStepIndex = prevSteps.findIndex(
|
const existingListStepIndex = prevSteps.findIndex(step => step.type === 'list' && step.id === listId);
|
||||||
step => step.type === 'list' && step.id === listId
|
|
||||||
);
|
|
||||||
if (existingListStepIndex !== -1) {
|
if (existingListStepIndex !== -1) {
|
||||||
// Update the existing ListStep with new fields, excluding discarded ones
|
|
||||||
const updatedSteps = [...prevSteps];
|
const updatedSteps = [...prevSteps];
|
||||||
const existingListStep = updatedSteps[existingListStepIndex] as ListStep;
|
const existingListStep = updatedSteps[existingListStepIndex] as ListStep;
|
||||||
|
|
||||||
const filteredNewFields = Object.entries(newFields).reduce((acc, [key, value]) => {
|
const filteredNewFields = Object.entries(newFields).reduce((acc, [key, value]) => {
|
||||||
if (!discardedFields.has(`${listId}-${key}`)) {
|
if (!discardedFields.has(`${listId}-${key}`)) {
|
||||||
acc[key] = value;
|
acc[key] = value;
|
||||||
@@ -91,7 +89,7 @@ export const BrowserStepsProvider: React.FC<{ children: React.ReactNode }> = ({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const addScreenshotStep = (fullPage: boolean) => {
|
const addScreenshotStep = (fullPage: boolean) => {
|
||||||
setBrowserSteps(prevSteps => [
|
setBrowserSteps(prevSteps => [
|
||||||
...prevSteps,
|
...prevSteps,
|
||||||
@@ -115,15 +113,18 @@ export const BrowserStepsProvider: React.FC<{ children: React.ReactNode }> = ({
|
|||||||
setBrowserSteps(prevSteps =>
|
setBrowserSteps(prevSteps =>
|
||||||
prevSteps.map(step => {
|
prevSteps.map(step => {
|
||||||
if (step.type === 'list' && step.id === listId) {
|
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 {
|
return {
|
||||||
...step,
|
...step,
|
||||||
fields: {
|
fields: updatedFields
|
||||||
...step.fields,
|
|
||||||
[fieldKey]: {
|
|
||||||
...step.fields[fieldKey],
|
|
||||||
label: newLabel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return step;
|
return step;
|
||||||
|
|||||||
Reference in New Issue
Block a user