Files
parcer/src/context/browserSteps.tsx

55 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-07-26 20:20:11 +05:30
import React, { createContext, useContext, useState } from 'react';
interface BrowserStep {
2024-07-26 20:22:20 +05:30
id: number;
label: string;
value: string;
2024-07-31 04:53:28 +05:30
selector: string;
2024-07-26 20:20:11 +05:30
}
interface BrowserStepsContextType {
2024-07-26 20:22:20 +05:30
browserSteps: BrowserStep[];
2024-07-31 04:53:28 +05:30
addBrowserStep: (label: string, value: string, selector: string) => void;
2024-07-26 20:22:20 +05:30
deleteBrowserStep: (id: number) => void;
updateBrowserStepLabel: (id: number, newLabel: string) => void;
2024-07-26 20:20:11 +05:30
}
const BrowserStepsContext = createContext<BrowserStepsContextType | undefined>(undefined);
export const BrowserStepsProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
2024-07-26 20:22:20 +05:30
const [browserSteps, setBrowserSteps] = useState<BrowserStep[]>([]);
2024-07-31 04:53:28 +05:30
const addBrowserStep = (label: string, value: string, selector: string) => {
2024-07-26 20:22:20 +05:30
setBrowserSteps(prevSteps => [
...prevSteps,
2024-07-31 04:53:28 +05:30
{ id: Date.now(), label, value, selector }
2024-07-26 20:22:20 +05:30
]);
};
const deleteBrowserStep = (id: number) => {
setBrowserSteps(prevSteps => prevSteps.filter(step => step.id !== id));
};
const updateBrowserStepLabel = (id: number, newLabel: string) => {
setBrowserSteps(prevSteps =>
prevSteps.map(step =>
step.id === id ? { ...step, label: newLabel } : step
)
);
};
return (
<BrowserStepsContext.Provider value={{ browserSteps, addBrowserStep, deleteBrowserStep, updateBrowserStepLabel }}>
{children}
</BrowserStepsContext.Provider>
2024-07-26 20:20:11 +05:30
);
};
export const useBrowserSteps = () => {
2024-07-26 20:22:20 +05:30
const context = useContext(BrowserStepsContext);
if (!context) {
throw new Error('useBrowserSteps must be used within a BrowserStepsProvider');
}
return context;
2024-07-26 20:20:11 +05:30
};