Merge pull request #37 from amhsirak/develop

feat: ensure label changes reflect in list step
This commit is contained in:
Karishma Shukla
2024-09-21 15:58:42 +05:30
committed by GitHub
3 changed files with 26 additions and 27 deletions

View File

@@ -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 });
}
}
}

View File

@@ -132,42 +132,40 @@ export const RightSidePanel: React.FC<RightSidePanelProps> = ({ onFinishCapture
onFinishCapture();
}, [stopGetText, getTextSettingsObject, socket, browserSteps, confirmedTextSteps]);
const getListSettingsObject = useCallback(() => {
let settings: {
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 };
limit?: number;
} = {};
browserSteps.forEach(step => {
if (step.type === 'list' && step.listSelector && Object.keys(step.fields).length > 0) {
const fields: Record<string, { selector: string; tag?: string;[key: string]: any }> = {};
Object.entries(step.fields).forEach(([label, field]) => {
const fields: Record<string, { selector: string; tag?: string; [key: string]: any }> = {};
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('');

View File

@@ -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;