Files
PriceUpdaterAppv2/src/tui/components/screens/withErrorBoundary.jsx
2025-08-15 15:39:28 -05:00

63 lines
1.4 KiB
JavaScript

const React = require("react");
const { ScreenErrorBoundary } = require("../common");
const { enhanceError, logError } = require("../../utils/errorHandler");
/**
* Higher-order component that wraps screens with error boundaries
* Requirements: 4.5, 16.1
*/
function withErrorBoundary(
WrappedComponent,
screenName,
screenSpecificTips = []
) {
const WrappedScreenComponent = (props) => {
const handleError = (error, errorInfo) => {
// Log the error with screen context
logError(error, {
screen: screenName,
errorInfo,
props: Object.keys(props),
});
};
const handleRetry = (retryCount) => {
console.info(`Retrying ${screenName}, attempt ${retryCount}`);
};
const handleReset = () => {
console.info(`Resetting ${screenName} after error`);
};
const handleExit = () => {
// Navigate back to main menu
if (props.navigateBack) {
props.navigateBack();
} else if (props.onExit) {
props.onExit();
}
};
return React.createElement(
ScreenErrorBoundary,
{
screenName,
screenSpecificTips,
onError: handleError,
onRetry: handleRetry,
onReset: handleReset,
onExit: handleExit,
maxRetries: 3,
},
React.createElement(WrappedComponent, props)
);
};
// Set display name for debugging
WrappedScreenComponent.displayName = `withErrorBoundary(${screenName})`;
return WrappedScreenComponent;
}
module.exports = withErrorBoundary;