in src/App.tsx [64:156]
export default function App() {
const [url, setUrl] = useState('');
const [isCodeFlyoutVisible, setIsCodeFlyoutVisible] = useState(false);
const { electronAPI } = useContext(CommunicationContext);
const stepsContextUtils = useStepsContext();
const { steps, setSteps } = stepsContextUtils;
const syntheticsTestUtils = useSyntheticsTest(steps);
const recordingContextUtils = useRecordingContext(
electronAPI,
url,
steps.length,
syntheticsTestUtils.setResult,
setSteps
);
const { isStartOverModalVisible, setIsStartOverModalVisible, startOver } = recordingContextUtils;
const dragAndDropContext = useDragAndDropContext();
const { dismissToast, sendToast, setToastLifeTimeMs, toasts, toastLifeTimeMs } =
useGlobalToasts();
useEffect(() => {
// `actions` here is a set of `ActionInContext`s that make up a `Step`
const listener: ActionGeneratedListener = (_event, actions) => {
setSteps((prevSteps: Steps) => {
const nextSteps: Steps = generateIR([{ actions }]);
return generateMergedIR(prevSteps, nextSteps);
});
};
const removeListener = electronAPI.addActionGeneratedListener(listener);
return removeListener;
}, [electronAPI, setSteps]);
return (
<EuiProvider cache={cache} colorMode="light">
<StyledComponentsEuiProvider>
<StepsContext.Provider value={stepsContextUtils}>
<RecordingContext.Provider value={recordingContextUtils}>
<TestContext.Provider value={syntheticsTestUtils}>
<UrlContext.Provider value={{ url, setUrl }}>
<DragAndDropContext.Provider value={dragAndDropContext}>
<ToastContext.Provider
value={{ dismissToast, sendToast, setToastLifeTimeMs, toasts, toastLifeTimeMs }}
>
<Title />
<HeaderControls setIsCodeFlyoutVisible={setIsCodeFlyoutVisible} />
<AppPageBody>
{steps.length === 0 && (
<EuiEmptyPrompt
hasBorder={false}
title={<h3>No steps recorded yet</h3>}
body={
<p>
Click on <EuiCode>Start recording</EuiCode> to get started with your
script.
</p>
}
/>
)}
{steps.map((step, index) => (
<StepSeparator
index={index}
key={`step-separator-${index + 1}`}
step={step}
/>
))}
<TestResult />
{isCodeFlyoutVisible && (
<ExportScriptFlyout setVisible={setIsCodeFlyoutVisible} steps={steps} />
)}
{isStartOverModalVisible && (
<StartOverWarningModal
startOver={startOver}
setVisibility={setIsStartOverModalVisible}
stepCount={steps.length}
/>
)}
</AppPageBody>
<EuiGlobalToastList
toasts={toasts}
dismissToast={dismissToast}
toastLifeTimeMs={toastLifeTimeMs}
/>
</ToastContext.Provider>
</DragAndDropContext.Provider>
</UrlContext.Provider>
</TestContext.Provider>
</RecordingContext.Provider>
</StepsContext.Provider>
</StyledComponentsEuiProvider>
</EuiProvider>
);
}